【发布时间】:2018-07-31 19:15:28
【问题描述】:
我遇到了 c 字符串的问题,我想保留原始字符串的地址并使用另一个 c 指针操作字符串,但是当尝试使用原始或辅助指针打印该字符串时会出现分段错误将字符串声明为字符数组不会出现此类错误。我不使用数组,也不想丢失原始地址。请指出问题。
/* segmentation fault when run */
char *string = "Hello World";
char *nick = string;
while(*nick)
*nick++ = '0';
printf("%s\n", string);
/* display 000000000000 when run (wished result)*/
char array[] = "Hello World";
char *nick = array;
while(*nick)
*nick++ = '0';
printf("%s\n", array);
【问题讨论】:
-
像“Hello World”这样的字符串文字可能(并且经常)分配在只读内存中。如果你想要一个可修改的字符串,声明一个数组,并使用该字符串来初始化数组。
-
Lee Daniel Crocker ,你的意思是没有办法拥有像我的 *string 这样的可写字符串?
-
您将分配一个可写缓冲区,就像在您的第二个代码示例中一样,或者使用
malloc()。 -
@Davislor 谢谢,我选择了 malloc 和 strcpy 的好主意来实现结果。
-
这行得通。你也可以看看
strdup()。
标签: c pointers segmentation-fault