可能重复:
C 程序字符串文字
总线错误:10 错误
使用 Xcode 4.5.2 for C,我想
char * string = "abc";
string[0] = 'f';
Run Code Online (Sandbox Code Playgroud)
和
char string[4] = "abc";
string[0] = 'f';
Run Code Online (Sandbox Code Playgroud)
是等价的。但是第一行给了我一个错误:
EXC_BAD_ACCESS(代码 = 2,地址 = 0x100 ...)
第二行没有给我错误。我认为这些在直 C 中是等价的。这是怎么回事?
int main (void) {
char * string = "abc";
string[0] = 'f';
} // main
Run Code Online (Sandbox Code Playgroud)
她们不一样。
char* s = "bla"
Run Code Online (Sandbox Code Playgroud)
上面的 s 指向存储字符串文字的内存位置。由于这是一个只读存储器(文字是常量),写入它失败。
char s[4] = "bla";
Run Code Online (Sandbox Code Playgroud)
这用s文字的内容填充缓冲区(在堆栈上分配)。您可以写入此缓冲区,因为它不是常量内存。
第一种语法被认为是合法的并且不会引发与 const 正确性相关的错误的原因与保持与旧版本 c 的向后兼容性有关。