【发布时间】:2021-01-21 01:00:37
【问题描述】:
我无法在标题中很好地解释我的问题。下面是两组代码:
int main() {
char str[81] = "Hello World";
scanf("%s", str);
str[3] = 'X';
printf("%s", str);
return 0;
}
输入 789 时,输出为“789Xo World”,这表明 scanf 函数正在将 char 数组的前 3 个索引替换为输入,而 str[3] 行将第 4 个索引替换为 'X'。这对我来说很有意义。
int main() {
char str[81] = "Hello World";
scanf("%s", str);
printf("%s", str);
return 0;
}
输入 789 时,输出 789。Scanf 不再替换 str 的前 3 个索引,而是替换整个内容。让我感到困惑的是,手动更改第 4 个索引 (str[3]) 会以某种方式使程序更改 str 的前面而不是完全替换它?
我对 C 语言非常陌生,在我的教科书中找不到任何解释。提前感谢您的帮助。
【问题讨论】:
-
scanf没有写X。scanf写入一个空终止符。你用X覆盖那个空终止符。 -
在
str[3] = 'X';之前尝试printf("str[3] = %d\n", str[3])以查看您要覆盖的内容。