我有一些像这样的代码:
#define MAXSIZE 100
int main() {
char str[MAXSIZE+1];
scanf("%100s", str);
...
问题是我仍然有“幻数”100,尽管定义了 MAXSIZE。
有没有办法正确地将 MAXSIZE“插入”scanf 格式字符串? (纯 C、c-99 标准品)
有,但你最好使用fgets()
:
if (fgets(str, sizeof str, stdin) != NULL) {
// process input
}
这样做的好处(除了毫无疑问的可读性提升之外)是fgets()
照顾尺寸正确地,我。 e.它解释了终止 0 字符(其中scanf()
没有),因此在声明缓冲区时,您不必在大小上加一。它还总是为您以 NUL 终止数组。更不容易出错。
至于原来的问题:尝试通常的“stringify”技巧:
#define REAL_STRINGIFY(x) #x
#define STRINGIFY(x) REAL_STRINGIFY(x)
scanf("%" STRINGIFY(MAXSIZE) "s", str);
但这非常丑陋,不是吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)