当前位置:  开发笔记 > 编程语言 > 正文

C字符串赋值给出了分段错误

如何解决《C字符串赋值给出了分段错误》经验,为你挑选了1个好方法。

我是C新手,我想执行此任务:声明并初始化一个字符串,然后将每个字符串元素重新分配给一个新值.

以这种方式编写代码:

char *str = "geeksforgeeks\0";

for (int i = 0; str[i] != '\0'; ++i) {
    str[i] = 'a';
}

抛出分段错误.

但是如果我以这种方式编写代码:

char string[] = "geeksforgeeks\0";
char *str = string;

for (int i = 0; str[i] != '\0'; ++i) {
    str[i] = 'a';
}

程序行为正确.

还有这段代码:

char str[] = "geeksforgeeks\0";

for (int i = 0; str[i] != '\0'; ++i) {
    str[i] = 'a';
}

行为正确.

两者有什么区别?不应该相同吗?



1> Jonathan Lef..:

如果你有:

char *str = "geeksforgeeks\0";

该字符串(通常)存储在只读内存中,当您尝试修改它时会出现分段错误.(\0实际上不需要;字符串末尾有两个空字节.)

最简单的解决方法是使用数组而不是常量字符串(这基本上就是你在第二种工作情况下所做的):

char str[] = "geeksforgeeks";

请注意,由于字符串不可修改,因此您应该将其用于字符串:

const char *str = "geeksforgeeks";

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有