我处理的是一个非我编写的c代码,并且有很多这样的fprintf调用:
fprintf(file, "blabla1""blabla2%s""blabla3", mystring);
我从未见过我们可以在fprintf的第二个参数中放入几个字符串,这是一种连接吗?或者这是fprintf的一个功能?如果是这样,fprintf的规范没有提到它?
答案 0 :(得分:3)
这是字符串文字的特征,如果它们相邻,它们将被连接起来。如果我们查看draft C99 standard部分6.4.5
字符串文字第4段说:
在翻译阶段6中,由任何序列指定的多字节字符序列 相邻字符和宽字符串文字标记连接成单个多字节 字符序列。如果任何标记是宽字符串文字标记,则生成 多字节字符序列被视为宽字符串文字;否则,它被视为字符串文字。
正如Lundin指出的更简单的引用可以在5.1.1.2
翻译阶段第6段中找到:
连接相邻的字符串文字标记。
答案 1 :(得分:2)
不,这不是fprintf()
的一个特征,这是不可能的(你将如何自己实现这样的功能?)因为fprintf()
只是一个标准函数,没有额外的魔法由编译器。
这是C语法的一个特性:通过将它们连接在一起,相邻的字符串文字被视为单个文字。
例如,它与preprocessor's stringification support非常有用。
答案 2 :(得分:0)
我将依次回答每个问题。
你击中了头部的钉子。确实是的。
不,只是C语法的一部分。
这实际上不是一个问题,尽管有标点符号,但你可能正确的说fprintf规范没有提到这种类型的连接,那是因为它是语言的一部分,而不是特定的功能。 / p>
答案 3 :(得分:0)
在您显示的代码中,只有一种格式代码:"%s"
。它接受mystring中包含的值,因此结果将是:“blablablabla2_contents of mystring_blabla3”
是的,这是合法代码。我不知道为什么有人会这样做。