gpt4 book ai didi

c - 为什么当我输入指向字符串文字的指针时,程序会返回段错误,但当我输入指向数组的指针时,程序不会返回段错误?

转载 作者:行者123 更新时间:2023-11-30 18:28:06 25 4
gpt4 key购买 nike

当我将 char * 文字传递给 trim() 时,它会出现段错误,但是当我发送数组指针时,它会起作用,为什么这不起作用?

int main(void){
/* If instead I have a char s[100] = "Hi ";
* it works as intended so why does it not work when i pass this.*/
char *s = "Hi ";
printf("<%s>\n", s);

trim(s);
printf("<%s>\n", s);

}

/* Trims all white-space off at end of string. */
void trim(char *s){
while (*s != '\0') ++s;

--s;
while (*s == ' ') --s;
*(++s) = '\0';
}

最佳答案

修改字符串文字的内容是 C 中未定义的行为,这意味着它可能导致任何类型的不当行为,包括崩溃。从概念上讲,字符串文字是cost char *,但由于历史原因,它的类型是非常量。这意味着将字符串文字分配给 char * 变量编译不会出错,但实际写入的程序不是有效的 C 程序。

崩溃的直接原因是编译器选择将字符串文字放置在只读内存中。此类内存由操作系统保护,尝试修改它的程序会自动终止。

关于c - 为什么当我输入指向字符串文字的指针时,程序会返回段错误,但当我输入指向数组的指针时,程序不会返回段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934030/

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