gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:04:37 24 4
gpt4 key购买 nike

我在使用 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);

最佳答案

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

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

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

关于c - 使用辅助指针操作 C 字符串后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51620529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com