gpt4 book ai didi

c - 展开带引号的字符串内的整数宏

转载 作者:行者123 更新时间:2023-11-30 18:29:32 24 4
gpt4 key购买 nike

在为 exim 做出贡献时,我看到了许多硬编码的值:

uschar filebuffer[256];
(void)sprintf(CS filebuffer, "%.256s.db", filename);
rc = lf_check_file(-1, filebuffer, S_IFREG, modemask, owners, owngroups,
"dbm", errmsg);
if (rc < 0) /* stat() failed */
{
(void)sprintf(CS filebuffer, "%.256s.dir", filename);
rc = lf_check_file(-1, filebuffer, S_IFREG, modemask, owners, owngroups,
"dbm", errmsg);
if (rc == 0) /* x.dir was OK */
{
(void)sprintf(CS filebuffer, "%.256s.pag", filename);
rc = lf_check_file(-1, filebuffer, S_IFREG, modemask, owners, owngroups,
"dbm", errmsg);
}
}
}

由于代码不是特定于 Windows 的,因此每个256值都应转换为PATH_MAX

我知道在带引号的字符串中扩展宏是不可能的,但是字符串连接是微不足道的:

#define STR "string"
size_t len=strlen("part"STR"part 2");

但是,诸如此类的事情:

"%."PATH_MAX".db"

不应该工作,因为PATH_MAX扩展为整数,而不是字符串。
那么有没有一种方法可以在不调用将整数转换为 C 字符串的函数的情况下做到这一点?

最佳答案

正确的方法是在格式字符串中使用 *,这将导致它从参数列表中获取值。例如:

printf("%.*s\n", 3, "abcde");

这相当于:

printf("%.3s\n", "abcde");

这样您就可以使用 PATH_MAX 或任何其他值来控制格式,而不必担心它们的定义方式(例如,它们是否包含括号或加法运算符等)

关于c - 展开带引号的字符串内的整数宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37534170/

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