使用辅助指针操作c字符串后出现分段错误



我的c字符串有问题,我想把原始字符串的地址放在一边,用另一个c指针操作字符串,但当试图用原始或辅助指针打印该字符串时,会出现分段错误,但将字符串声明为字符数组不会出现这种错误。我不想使用数组,也不想丢失原始地址。请指出问题所在。

/* segmentation fault when run */
char *string = "Hello World";
char *nick = string;
while(*nick)
*nick++ = '0';
printf("%sn", string);
/* display 000000000000 when run (wished result)*/
char array[] = "Hello World";
char *nick = array;
while(*nick)
*nick++ = '0';
printf("%sn", array);

第一个代码示例初始化指向字符串常量开头的指针。修改字符串常量是未定义的行为

事实上,你永远不应该写char *s = "hello world";。总是写const char *s,或者更好的是,如果它指向字符串常量,则写const char* const s。允许使用不是const别名字符串常量的指针的唯一原因是为了与const关键字存在之前编写的代码向后兼容。在新代码中从来没有任何好的理由这样做。

第二个代码示例创建了一个具有静态存储的数组。修改那个数组是可以的。

最新更新