我写了这个小程序来练习数组,它应该最多包含 10 个字符,结尾是\0。它有效,但效果太好,即使我输入 50 个字符的名称,它也会吐出正确的输入。给了什么?
#include <stdio.h>
int main(int argc, char const *argv[])
{
char name[11];
printf("Enter your name: ");
scanf("%s", name);
printf("Hi, %s\n", name);
return 0;
}
最佳答案
您正在覆盖您分配的数组末尾 - 您需要在 scanf 中指定要读取的字符串的长度以确保它适合。
scanf("%10s", name);
对代码的改进是生成格式字符串,使其始终具有正确的大小。
#include <stdio.h>
int main(int argc, char const *argv[])
{
char name[11];
char formatstr[50];
snprintf(formatstr, sizeof(formatstr), "%%%ds", sizeof(name)-1);
printf("Enter your name: ");
scanf(formatstr, name);
printf("Hi, %s\n", name);
return 0;
}
关于c - 数组限制不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151414/