|
|
发表于 2013-10-3 12:18:15
|
显示全部楼层
最近又遇到了一个问题,这个也是C语言中常见的问题。时间久了没有接触又忘了,现在再来学习一遍。
看下面的代码:
char *p = "abcdefgh";
char *temp;
p = p + 3;
temp = strcpy(p, "ABCD");
//printf("%s\n", temp);
printf("%d\n", strlen( temp ) );
这里编译的时候就会出现问题。问题如下:
1、temp = strcpy(p, "ABCD");。首先我们定义的char *temp是一个野指针,没有指向具体的位置。所以这样的赋值是错误的。编译时会报错。
2、还是这句话temp = strcpy(p, "ABCD");。我们执行strcpy(p, "ABCD");时也会有问题。问题出在我们定义和赋初值的char *p = "abcdefgh";这句话。这里的指针不是一个野指针,是一个正常的可用的指针,但是注意它所在的区域是只读存储区,也就是说是不能改变其内容的。而strcpy(p, "ABCD")是要将p所指向的内容变成字符串ABCD,所以就会报错了。
这两个问题我曾经在翻译FAQ的时候也遇到过。有兴趣的同学可以在这个版块的C语言FAQ中的子分类中的Question1.32和Question8.5中找到原版的详细的解释。 |
|