gpt4 book ai didi

c - #define 字符串与数字定义

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:55 25 4
gpt4 key购买 nike

例如,这是一个C通用的#define:

#define USERNAME_LEN  100
#define SCAN_FMT "%100s"

// str is input from somewhere
char username[USERNAME_LEN + 1];
ret = sscanf(str, SCAN_FMT, username);
// check ret == 1 ?

我们可以这样吗:

#define SCAN_FMT   "%" USERNAME_LEN "s"

当然,这种语法不是我们想要的,而是最终目的就是将数字#define混入字符串#define

注意:我知道我们可以这样做:

sprintf(SCAN_FMT, "%%ds", USERNAME_LEN); // char SCAN_FMT[10];

但这不是我要找的,因为它需要运行时生成,最好是基于ANSI-C或std99。

最佳答案

你可能喜欢这样做:

#define SCAN_FMT_STRINGIFY(max) "%"#max"s"
#define SCAN_FMT(max) SCAN_FMT_STRINGIFY(max)

#define USERNAME_MAXLEN (100)

...

char username[USERNAME_MAXLEN + 1] = ""; /* Add one for the `0`-terminator. */
int ret = sscanf(str, SCAN_FMT(USERNAME_MAXLEN), username);

关于c - #define 字符串与数字定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21136629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com