在下面的代码中:
#include <stdio.h>
int main(){
char word[]="";
scanf("%s",word);
printf("%s: %d\n", word, sizeof(word));
}
Input:
Hello
Output:
Hello: 1
为什么
sizeof(word)
打印 word
的原始大小,尽管在执行 scanf()
函数后包含“Hello”而不是空字符串。
我希望输出是
Hello: 6
。word
数组的方式有关,但正如你所看到的,我想避免将静态大小设置为 word
以及任何与字符串相关的 header file
。
我正在使用 VS Code 和 gcc(Rev2,由 MSYS2 项目构建)13.2.0 编译器
当您使用
scanf
时,C 不会动态更改数组的大小。
char word[]="";
声明一个足够大的数组,可以包含字符串文字 '""
指示的数组。
""
表示以空字节结尾的零个字符的字符串。该字符串仅由一个字节(空字节)表示。所以它的数组包含一个元素。
scanf("%s",word);
要求 scanf
从标准输入流中读取字符串并将其写入数组 word
。如果输入中有任何非空白字符,这将尝试写入超出单字节数组末尾的位置word
。那么该行为不是由 C 标准定义的。
如果程序继续,则
sizeof(word)
是定义的数组大小,一个字节。 scanf
扫描的不是字符串的长度。