gpt4 book ai didi

c - 写入 c 字符串

转载 作者:太空狗 更新时间:2023-10-29 15:44:54 25 4
gpt4 key购买 nike

我的代码有段错误,我不知道为什么。

 1  #include <stdio.h>
2
3 void overwrite(char str[], char x) {
4 int i;
5 for (i = 0; str[i] != '\0'; i++)
6 str[i] = x;
7 }
8
9 int main(void) {
10 char *s = "abcde";
11 char x = 'X';
12 overwrite(s, x);
13 printf("%s\n", s);
14 return 0;
15 }

gdb 调试器告诉我,问题出在第 6 行,我想将 char 存储到 c 字符串中(如果我使用左值指针解引用,它是同样的问题。)他是这样说的:

(gdb) run
Starting program: /tmp/x/x

Breakpoint 1, overwrite (str=0x8048500 "abcde", x=88 'X') at x.c:5
5 for (i = 0; str[i] != '\0'; i++)
(gdb) s
6 str[i] = x;
(gdb)

Program received signal SIGSEGV, Segmentation fault.
0x080483e3 in overwrite (str=0x8048500 "abcde", x=88 'X') at x.c:6
6 str[i] = x;
(gdb) q

我正在从 K&R-C 书中学习,这是第 2.8 章(删除功能)中的简化示例。我不知道问题出在哪里。

最佳答案

因为 char*s = "abcde";在只读内存中创建字符串。尝试

char s[] = "abcde";

编辑:解释:char* 是指针,“abcde”在只读内存中创建 -> 不可变。

char[]是数组,完全存储在栈中,从内存中初始化,所以是可变的

关于c - 写入 c 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1405594/

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