字符 * 与字符 []

Car*_*der 4 c char

可能重复:
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)

Sto*_*ica 8

她们不一样。

char* s = "bla"
Run Code Online (Sandbox Code Playgroud)

上面的 s 指向存储字符串文字的内存位置。由于这是一个只读存储器(文字是常量),写入它失败。

char s[4] = "bla";
Run Code Online (Sandbox Code Playgroud)

这用s文字的内容填充缓冲区(在堆栈上分配)。您可以写入此缓冲区,因为它不是常量内存。

第一种语法被认为是合法的并且不会引发与 const 正确性相关的错误的原因与保持与旧版本 c 的向后兼容性有关。