如何更新声明为 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
但是当我运行应用程序时,它只打印一个空行?
您正在做的是尝试修改字符串文字。结果为 undefined behavior .
相关,来自标准 C11
,章节 §6.4.5,String literals
[..] If the program attempts to modify such an array, the behavior is
undefined.
如果要修改内容,则需要使用 char
数组。沿线的东西
char s[] = "hello";
否则,如果你想拥有 char *s
形式,你必须
- 分配内存给
s
- 使用
strcpy()
将内容复制到 s
然后,您可以修改s
,因为malloc()
返回的内存位置将是可写的。