直接发送字符串与发送指向字符串的指针给函数有什么区别?
What is the difference between sending a string directly than sending a pointer to a string to a function?
直接发送字符串与将指向字符串的指针发送给函数有什么区别?
例如:
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?
}
对于第一个,我会遇到各种访问冲突错误,而对于第二个,我不会,那么两者之间有什么区别?
首先你应该知道在C中没有字符串,因此没有指向字符串的指针,但是指向char数组的指针是可能的。
代码片段
foo("asdf");
等同于
char a[]="asdf";
foo(a);
因为在 C 中,字符串文字是 type char []
,因此除了您不能修改在 [=14= 中的 foo("asdf");
中传递的字符串文字外,这两个代码段没有区别] 功能不同于第二个片段。
在第一种情况下,您将字符串文字传递给函数。字符串文字是不可变的,这意味着您不能更改它的任何部分。这是一个存储在只读内存段中的 static
数组。尝试更改此字符串会导致 Undefined Behavior.
在第二种情况下,您构造一个数组,使用 "asdf"
对其进行初始化并将其传递给函数。这种情况下,可以修改数组中的字符。
有关详细信息,请参阅 question 1.32 of the comp.lang.FAQ。
直接发送字符串与将指向字符串的指针发送给函数有什么区别?
例如:
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?
}
对于第一个,我会遇到各种访问冲突错误,而对于第二个,我不会,那么两者之间有什么区别?
首先你应该知道在C中没有字符串,因此没有指向字符串的指针,但是指向char数组的指针是可能的。
代码片段
foo("asdf");
等同于
char a[]="asdf";
foo(a);
因为在 C 中,字符串文字是 type char []
,因此除了您不能修改在 [=14= 中的 foo("asdf");
中传递的字符串文字外,这两个代码段没有区别] 功能不同于第二个片段。
在第一种情况下,您将字符串文字传递给函数。字符串文字是不可变的,这意味着您不能更改它的任何部分。这是一个存储在只读内存段中的 static
数组。尝试更改此字符串会导致 Undefined Behavior.
在第二种情况下,您构造一个数组,使用 "asdf"
对其进行初始化并将其传递给函数。这种情况下,可以修改数组中的字符。
有关详细信息,请参阅 question 1.32 of the comp.lang.FAQ。