我有一个作业,我必须获取一个字符串输入,其长度不得大于 32。这个长度由一个名为
MAX_BUF_LEN
的宏给出。我在 StackOverflow 上找到了解决方案,其中这个限制是通过一个幻数给出的。但有什么办法可以避免这种情况吗?
我找到的解决方案是这样的:
char buf[MAX_BUF_LEN];
scanf("%"512"[^\n]", buf);
此外,我发现这个解决方案在数字512前后都有引用标记;没有它。有什么区别吗
定义可以字符串化以在格式字符串中使用。
格式字符串中的值必须比数组的大小小 1。
#include <stdio.h>
#define MAX_BUF_LEN 512
// stringify to use in format string
#define FS(x) SFS(x)
#define SFS(x) #x
int main ( void) {
char buf[MAX_BUF_LEN + 1]; // +1 to allow for terminating zero
scanf("%"FS(MAX_BUF_LEN)"[^\n]", buf);
}