我有一个疑问,数组的长度是如何分配的
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "s";
long unsigned a = strlen(str);
scanf("%s", str);
printf("%s\n%lu\n", str, a);
return 0;
}
在上面的程序中,我将字符串
"s"
赋值给了一个char
数组。我认为str[]
的长度是1,所以我们不能存储超过数组长度的内容。但实际上情况并非如此。如果我使用scanf
读取一个字符串,则该字符串可以在没有任何错误的情况下存储在str[]
中。那么数组str
的长度是多少?样例输入/输出:
Hello
Hello 1
scanf("%s", str);
代码的提示:1) 必须始终检查返回值(而不是参数值),以确保操作成功。请注意,scanf()
函数族会返回成功的输入格式转换说明符数量(或 EOF)。在当前情况下,任何返回值都不等于 1,都表示发生了错误。2) 请注意,缓冲区str[]
的长度为 2。当使用说明符%s
和/或%[...]
时,请始终包括一个 MAX CHARACTERS 修改器,该修改器比输入缓冲区的长度少 1,因为这些说明符总是追加一个 NUL 字节。 - user3629249