gpt4 book ai didi

c - MingW 下更改字符串中的字符时出现段错误

转载 作者:行者123 更新时间:2023-11-30 20:16:02 24 4
gpt4 key购买 nike

Possible Duplicate:
can’t modify char* - Memory access violation

一直在追踪我用 MingW 编译的 C 程序中的问题,最终归结为下面非常简单的测试用例。

其目的当然是更改字符串中的字符。但这段代码给了我一个段错误。有人可以解释一下为什么吗?我不明白...

测试.c:

#include <stdio.h>

main(){
char *s = "xx";
printf("(%s)\n", s);
s[0] = 'z'; // ** Segmentation fault here **
printf("(%s)\n", s);
}

--

$ gcc -c test.c
$ gcc -o test.exe test.o
$ ./test.exe
(xx)
Segmentation fault

最佳答案

字符串“xx”可以被编译器分配到只读内存中。因此,当您尝试更改该内存时,如果它已分配给只读内存,您将遇到段错误。

如果您的字符串大小是固定的,例如在您的示例中,如果您将字符串定义为字符数组,则内存将不会分配为只读,并且您不会遇到该问题。

有时,您不知道字符串的最大大小或者您不想浪费空间,因此您需要 malloc() 该内存,使用 strdup() (它分配内存作为其函数的一部分) ,或类似的东西。

关于c - MingW 下更改字符串中的字符时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14544409/

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