【发布时间】:2013-06-11 06:13:42
【问题描述】:
int main()
{
char *x = "HelloWorld";
char y[] = "HelloWorld";
x[0] = 'Z';
//y[0] = 'M';
return 0;
}
在上述程序中,HelloWorld 将位于只读部分(即字符串表)。 x 将指向该只读部分,因此尝试修改该值将是未定义的行为。
但y 将在堆栈中分配,HelloWorld 将被复制到该内存中。所以修改 y 可以正常工作。 String literals: pointer vs. char array
这是我的问题:
在下面的程序中,char *arr 和char arr[] 如果内容被修改,都会导致分段错误。
void function(char arr[])
//void function(char *arr)
{
arr[0] = 'X';
}
int main()
{
function("MyString");
return 0;
}
- 在函数参数上下文中有何不同?
- 不会为函数参数分配内存??
请分享你的知识。
【问题讨论】:
-
与数组参数大小的讨论无关。这是关于字符串文字与字符数组的 const-ness,这与大小几乎无关。
标签: c gcc string-literals function-parameter