如何将字符常量连接到字符串中。C

ideaman42

如果我在C语言中定义了一个常量字符,是否可以将其隐藏为字符串文字?

#ifdef WIN32
#  define SEP '\\'
#  define ALTSEP '/'
#else
#  define SEP '/'
#  define ALTSEP '\\'
#endif

#define SOME_STRING_LITERAL "foo"

/* code snippet */
/* Desired string: "prefix_foo/bar" */
const char *path = "prefix_" SOME_STRING_LITERAL SEP "bar";

当然这会失败,因为SEP没有将其定义为字符串文字,但是有什么方法可以使SEP串联正确吗?还是我需要另一个定义,例如#define SEP_STR "/"

伦丁

我认为您无法在C中做到这一点。

核心问题是"符号太基础了,以至于即使在预处理器不知道它应该被视为预处理令牌之前,也要对其进行解释。

使用#运算符进行字符串化将无济于事。即使你写一个像

#define STRINGINIZE(x) #x
#define CHAR_TO_STR(ch) STRINGINIZE(ch)

然后以

const char *path = "prefix_" SOME_STRING_LITERAL CHAR_TO_STR(SEP) "bar";

这样做对您没有好处,因为您最终会得到类似以下的字符串

prefix_foo`\`bar

您也不能这样做:

const char *path = "prefix_" SOME_STRING_LITERAL CHAR_TO_STR(SEP)[1] "bar";

因为它与我们一开始的内容完全相同,并且无法编译。

同样,您不能基于串联预处理器令牌来制定解决方案,因为它"是比更为基本的符号##

因此,唯一的解决方案似乎是将字符声明为字符串文字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将字符连接到 C 中的字符串?

如何将十六进制连接到 C 中的字符串

如何将常量字符串与常量字符串连接?

如何将转义连接到字符串?

c++ - 如何将一个int数组连接到用点分隔的c ++中的字符串?

如何将单选按钮中的$ _POST值连接到PHP字符串中?

如何将列表中的项目连接到单个字符串?

如何将多个数据框对象连接到字符串中

如何将切片[] interface {}连接到字符串中?

如何将 env 变量连接到 YAML 文件中的字符串

如何将数字连接到宏中的字符串?

如何将i32数字的Vec <>连接到字符串中?

如何将varchar连接到Redshift表中的字符串

R Shiny-如何将字符串和数字连接到新字符串并打印

如何将数组连接到字符串并将其添加到带换行符的textarea中?

如何将日期单元格(独立于语言环境)连接到 Excel 中的字符串?

Groovy:如何在注释中连接字符串常量?

如何将“$@”或数组连接到一个字符串

MongoDB:如何将文档ID连接到唯一字符串

如何将结果集连接到字符串变量

如何将字符串和变量连接到th:src

如何将数据库元素连接到字符串

如何将位连接到位字符串的末尾?

潘达斯-如何将日期和文本(字符串)连接到新列?

如何将“/”分隔符连接到字符串?

如何将字符串变量中的值插入 Perl 中的常量?

Javascript:如何将字符串连接到对象?

如何将两个字符串作为字符串连接到odoo Char字段中?

如何将Chapel字符串传递给需要(非常量)char *的C函数?