字符数组改为指针型后不能正常运行

huangyiyun 2009-07-23 04:57:44
#include <stdio.h>
#include <string.h>

void copy_string(char *from,char *to)
{
int i=0;
while(from[i]!='\0')
{
to[i]=from[i];
i++;
}
to[i]='\0';
}

main()
{
char a[]="I am a teacher.";
char b[]="you are a student.";
printf("string a=%s\nstring b=%s\n",a,b);
copy_string(a,b);
printf("\nstring a=%s\nstring b=%s\n",a,b);
printf("\n");
}


在Visual C++6.0中,为什么我将main()函数中的char型字符数组a、b改成指针型后(其它代码的都不改),执行时弹出警告称“遇到问题需要关闭”。
也就是说,改成char *a="I am a teacher.";和char *b="you are a student.";后,main()函数中的最后两行程序无任何输出结果,程序不能正常运行。并弹出对话框说遇到问题需要关闭”。
...全文
105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcdef0966 2009-07-23
  • 打赏
  • 举报
回复
char a[]="I am a teacher.";//字符串在栈空间,是可以被修改的
char *b="I am a teacher.";//字符串在静态存储区 ,不可以被修改


char name1[] = “john”;
name1 = ‘A’//正确

char *name1 = “john”;
name1 = ‘A’//编译正确,执行时出错


建议你找c专家编程或其他的书看看字符数组和字符指针的区别

kojie_chen 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 clhposs 的回复:]
copy_string 要那么麻烦吗?

while(*from++=*to++);
[/Quote]
这个定下,不用判断吗?
clhposs 2009-07-23
  • 打赏
  • 举报
回复
char *p="fasdfasd";  //指针指向一个常量  常量是不能修改的
clhposs 2009-07-23
  • 打赏
  • 举报
回复
copy_string 要那么麻烦吗?

while(*from++=*to++);
cyldf 2009-07-23
  • 打赏
  • 举报
回复
嗯,改为char *后,字符串存放在常量去,改动就会出问题了
DarkChampion 2009-07-23
  • 打赏
  • 举报
回复
前一种定义是数组定义,
后一种是常量定义,不允许更改内容
rainbow_free 2009-07-23
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090707/10/6b511e6f-a178-418f-8e49-b72ec9e8b2b6.html
和这个问题一样!
大前置 2009-07-23
  • 打赏
  • 举报
回复
char *a="I am a teacher.";和char *b="you are a student.";

定义的是一个字符串常量

而c/C++中,是不能对常量进行任何修改的
hit_flying 2009-07-23
  • 打赏
  • 举报
回复
改了之后指针指向的是常量,不允许对常量内存进行改动

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧