c - 数组限制不起作用

标签 c arrays

我写了这个小程序来练习数组,它应该最多包含 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/

相关文章:

Ctrl + C 处理程序在某些主机上工作而不在其他主机上工作

c - 如何优化阀门仿真逻辑?

c - 要求用户在 switch 语句中输入,这将在 c 中生成另一个开关

c++ - 从二进制内容中识别 7z SFX

javascript - 视频阵列不工作

javascript - 比较两个数组并插入空值

c - 从 C 程序返回值是什么意思?

c - 如何在c编程中用其出现次数(频率)替换二维数组元素

Python使用数组轴来选择切片

c - 考虑到每个值都有唯一的对应值,如何随机显示数组中的值?