【发布时间】:2018-04-30 23:08:06
【问题描述】:
假设我有一个字符数组:
#define LEN 10
char arr[LEN + 1];
让我们对其进行一些scanf操作:
scanf("Name: %s", arr);
如果有人输入的名称超过 10 个字符,这可能会很危险。所以最好用这个:
scanf("Name: %10s", arr);
现在如果LEN 被更改,我会遇到麻烦。我必须通过整个代码来更正我在arr 的上下文中使用10 的每一行。所以我想到了这样的事情:
scanf("Name: %LENs", arr);
但这不起作用。LEN 没有被预处理器解析,因为它在字符串中使用。
如何在格式字符串中使用定义?
【问题讨论】:
-
您不要在格式字符串中使用定义。您使用 sprintf() 构建格式字符串并将其传递给 scanf。
-
@jwdonahue 不好的建议。
-
@iBug,你有更好的建议吗?
-
@jwdonahue总的来说不是一个坏建议,但如果你可以使用预处理器,它总是更好(没有运行时开销)。跨度>
-
@iBug 这个讨论毫无意义。你抄袭了一切,在我的回答之后的许多步骤中,mods 可以看到。你显然只是在寻找代表和徽章。这不是游戏,绝不容忍抄袭。
标签: c c-preprocessor format-specifiers