直接发送字符串比将字符串指针发送到函数有什么区别?

shi*_*zou 0 c syntax error-handling

直接发送字符串比将字符串指针发送到函数有什么区别?

例如:

void foo(char * a){//suppose foo reads and/or writes to the passed string
    ...
}

int main(){
    foo("asdf");//what is the difference between this

    char a[]="asdf";
    foo(a);//and this?
}
Run Code Online (Sandbox Code Playgroud)

第一个我得到各种访问违规错误,而第二个我没有,所以这两者有什么区别?

Spi*_*rix 5

在第一种情况下,您将字符串文字传递给函数.字符串文字是不可变的,这意味着您无法更改它的任何部分.这是一个static存储在只读存储器段中的数组.尝试更改此字符串会导致未定义的行为.

在第二种情况下,您构造一个数组,初始化它"asdf"并将其传递给函数.在这种情况下,可以修改数组中的字符.

有关详细信息,请参阅comp.lang.FAQ的问题1.32.