以下代码在第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测试.
我知道我可能会用这个问题击败死马,但我有点困惑,我还没有找到SO或谷歌的确切答案(我有信心是对的 - 这里有太多的信息在C字符串上筛选).另外,我已经将它标记为C++,因为这是我感兴趣的,即使我们特别谈论的是C风格的字符串.
在这种情况下:
char const a* = "hello";
char const b[] = "goodbye";
Run Code Online (Sandbox Code Playgroud)
我本来以为"你好"和"再见"是不可变的字符串,因为它们来自应衰减到一个char*常量字符串常量.
我已经看到了,在这种特殊情况下,虽然,改变"你好"将是不确定的,同时改变"再见"就可以了,假设你剥去从B数组常量性.
我假设在b的情况下字符串是可变的,因为它存储在用户定义的数组中.
在这种情况下,你好,再见不同吗? 在这个例子中,由于某些原因,再见不是字符串文字.另外,如果再见不是字符串文字,我可以假设它不在全局内存中,并且在编译时间之后对它的唯一引用是留在用户数组单元格中吗?