相关疑难解决方法(0)

为什么在写入用"char*s"而不是"char s []"初始化的字符串时会出现分段错误?

以下代码在第2行接收seg错误:

char *str = "string";
str[0] = 'z';  // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

虽然这非常有效:

char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

经过MSVC和GCC测试.

c c-strings segmentation-fault

277
推荐指数
10
解决办法
7万
查看次数

C-String数组初始化 - 这是可变的吗?

可能重复:
修改C字符串常量?
const char与char数组vs std :: string的指针

我知道我可能会用这个问题击败死马,但我有点困惑,我还没有找到SO或谷歌的确切答案(我有信心是对的 - 这里有太多的信息在C字符串上筛选).另外,我已经将它标记为C++,因为这是我感兴趣的,即使我们特别谈论的是C风格的字符串.

在这种情况下:

char const a*  = "hello";
char const b[] = "goodbye";
Run Code Online (Sandbox Code Playgroud)

我本来以为"你好"和"再见"是不可变的字符串,因为它们来自应衰减到一个char*常量字符串常量.

我已经看到了,在这种特殊情况下,虽然,改变"你好"将是不确定的,同时改变"再见"就可以了,假设你剥去从B数组常量性.

我假设在b的情况下字符串是可变的,因为它存储在用户定义的数组中.

在这种情况下,你好,再见不同吗? 在这个例子中,由于某些原因,再见不是字符串文字.另外,如果再见不是字符串文字,我可以假设它不在全局内存中,并且在编译时间之后对它的唯一引用是留在用户数组单元格中吗?

c++ c-strings

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

c-strings ×2

c ×1

c++ ×1

segmentation-fault ×1