【发布时间】:2013-10-20 15:15:39
【问题描述】:
所以我正在编写一个小程序(我是 C 新手,来自 C++),我想接收一个最大长度为 10 的字符串。
我声明一个字符数组为
#define SYMBOL_MAX_LEN 10 //Maximum length a symbol can be from the user (NOT including null character)
.
.
.
char symbol[SYMBOL_MAX_LEN + 1]; //Holds the symbol given by the user (+1 for null character)
那我用的时候为什么会这样:
scanf("%s", symbol); //Take in a symbol given by the user as a string
我可以输入“01234567890”,程序仍会存储整个值吗?
我的问题是:
- scanf 是否不会阻止将值记录在相邻的
symbol之后的内存块? - 如何防止用户输入大于长度
SYMBOL_MAX_LEN的值? - scanf 是自动将空终止字符放入
symbol,还是我需要手动执行?
【问题讨论】:
-
通常编译器会将数组的大小填充为 4 的倍数以保持数据对齐,因此实际大小不是 11 而是 12。