【发布时间】:2014-08-20 17:13:47
【问题描述】:
如何使用变量指定scanf() 应读取的最大字符数?
例如使用printf(),你可以像这样使用*
#define MAXVAL 5
printf("Print at maximum MAXVAL chars: %.*s\n", MAXVAL, "myStringHere");
这只会打印 5 个字符,我怎样才能让 scanf 只在 MAXVAL 中读取? MAXVAL 必须用作长度说明符。我不能干脆做
scanf("%5s", string);
现在我只能想到使用scanf 读入一个大数组,然后使用ssprintf 将字符串存储到我的长度有限的字符串中。但是,使用长度说明符会容易得多。
【问题讨论】:
-
-1的大小减少了这个数量,因为scanf为该字符串添加了一个 NUL 字符读取 (%s)。例如。scanf("%4s", string); -
@user3121023 我想他想使用
MAXVAL,而不是在格式字符串中硬编码一个值。 -
@mafso
fgets换行符,scanf空白符。 @CSSStudent 您可以在代码中创建格式说明符。 -
@FilipeGonçalves 你说得对,我需要使用
MAXVAL -
@clcto "scanf break on whitespace" 忽略格式参数的影响。函数
scanf()不一定会在空白处中断,因为它取决于格式。scanf("%5s")将消耗前导空白(不会在 w-s 上中断),然后扫描非空白字符直到 1) 空白(在 w-s 上中断)2) 5char读取 3) EOF 或 4) IOError .