写入C字符串 [英] Writing into c-string
问题描述
我的code段错误,我不知道为什么。
my code segfaults and I don't know why.
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字符串(如果我用左值指针引用,这是同样的问题。)这是他说的话:
The gdb debugger tells me, that problem is on the line 6, where I want to store a char, into c-string (if I use lvalue pointer dereferencing, it's the same problem.) This is what he says:
(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章(删除功能)。我不知道问题出在哪里。
I am learning from K&R-C book and this is simplified example from chapter 2.8 (the remove function). I have no idea where is the problem.
推荐答案
由于字符* S =ABCDE;创建于只读存储器字符串。尝试
because char*s = "abcde"; creates string in readonly memory. try
char s[] = "abcde";
编辑:解释:字符*为指针,在只读存储器中创建ABCDE - >不可改变
explanation: char* is pointer, and "abcde" is created in readonly memory -> immutable.
炭[]是数组,其全部存储在栈和从存储器初始化,因此是可变的
char[] is array, which is wholly stored on stack and initialized from the memory, so is mutable
这篇关于写入C字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!