我正在尝试使用字 rune 字在初始化后编辑字符串,如下所示:
int main() {
char str1[10] = "hello";
str1[0] = "b";
printf("%s\n", str1);
return 0;
}
结果是“dello”,即“d”而不是“b”。同样,下面只是胡说八道。
int main() {
char str1[10];
str1[0] = "h";
str1[1] = "e";
str1[2] = "l";
str1[3] = "l";
str1[4] = "o";
printf("%s\n", str1);
}
我找到了一个 StackOverflow post提到这应该导致段错误或访问冲突错误,但它并没有真正解释原因。
最佳答案
str1[0] = "b";
这里,"b"
是一个字符串文字,不是一个字符。字符用单引号括起来:
str1[0] = 'b';
如果您启用了编译器警告,您会得到如下内容:
warning: incompatible pointer to integer conversion assigning to 'char' from 'char [2]' [-Wint-conversion]
str1[0] = "b"; ^ ~~~
在您的第二个代码中,您的字符串缺少终止符 null-character ,因此将它传递给 printf
会调用未定义的行为,因为 printf
无法知道您的字符串在哪里结束。要在末尾附加空字符,只需执行以下操作:
str1[5] = '\0';
关于c - 为什么更改字符串的字符不会给出所需的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41402484/