如何更新声明为char
的字符串中的单个char*
?
我试过这个:
int main(void)
{
char* s = "hello";
s[0] = 'y';
printf("%s\n", s);
return 0;
}
使用以下参数编译GCC 4.8.1(MinGW)时没有警告或错误:
gcc -Wall -Wextra -Werror -o str.exe str.c
但是当我运行应用程序时,它只打印一个空行?
答案 0 :(得分:3)
您正在尝试修改字符串文字。它导致undefined behavior。
相关,来自标准C11
,章节§6.4.5,字符串文字
[..]如果程序试图修改这样的数组,行为是 未定义。
如果要修改内容,则需要使用char
的数组。
char s[] = "hello";
否则,如果您想拥有char *s
表单,则必须
s
strcpy()
将内容复制到s
然后,您可以修改s
,因为malloc()
返回的内存位置是可写的。