写入C字符串 [英] Writing into c-string

查看:193
本文介绍了写入C字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆