使用 scanf 时如何使用变量来指定字段长度。
例如:
char word[20+1];
scanf(file, "%20s", word);
另外,使用 20+1 是否正确(因为它需要在末尾添加 \0?)。相反,我想要这样的东西:
#define MAX_STRING_LENGTH 20
and then
char word[MAX_STRING_LENGTH+1];
scanf(file, "%"MAX_STRING_LENGTH"s", word); // what's the correct syntax here..?
这可能吗?如果它是一个像这样的变量呢?
int length = 20;
char word[length+1];
scanf(file, "%" length "%s", word); // what's the correct syntax here..?
Thanks.
以下应该满足第一种情况的需要。
#define MAX_STRING_LENGTH 20
#define STRINGIFY(x) STRINGIFY2(x)
#define STRINGIFY2(x) #x
{
...
char word[MAX_STRING_LENGTH+1];
scanf(file, "%" STRINGIFY(MAX_STRING_LENGTH) "s", word);
...
}
注意:需要两个宏,因为如果您尝试直接使用类似 STRINGIFY2 的内容,您只会得到字符串"MAX_STRING_LENGTH"
而不是它的价值。
对于第二种情况,你可以使用 snprintf 之类的东西,至少某些版本的 C 只会让你在堆中分配动态大小的数组malloc()
或一些这样的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)