如何使用变量指定scanf()应读入的最大字符数?
例如使用printf()你可以像这样使用*
#define MAXVAL 5
printf("Print at maximum MAXVAL chars: %.*s\n", MAXVAL, "myStringHere");
Run Code Online (Sandbox Code Playgroud)
这只会打印5个字符,如何才能scanf在MAXVAL中读取?MAXVAL必须用作长度说明符.我不能简单地做
scanf("%5s", string);
Run Code Online (Sandbox Code Playgroud)
现在我只能想到读入一个大数组scanf然后ssprintf用来将字符串存储到我的长度有限的字符串中.然而,使用长度说明符会更容易.
R S*_*ahu 16
您可以使用C预处理器来帮助您.
#define STR2(x) #x
#define STR(X) STR2(X)
scanf("%" STR(MAXVAL) "s", string);
Run Code Online (Sandbox Code Playgroud)
该处理器结合"%" STR(MAXVAL) "s"到"%5s"
#include <stdio.h>
#define MAXLEN 5
#define S_(x) #x
#define S(x) S_(x)
int main(void){
char string[MAXLEN+1];
scanf("%" S(MAXLEN) "s", string);
printf("<%.*s>\n", MAXLEN, string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)