在c:“...”“......”中一个接一个地串起来,好像它们是连接起来的

时间:2013-09-05 14:02:39

标签: c string concatenation printf

我处理的是一个非我编写的c代码,并且有很多这样的fprintf调用:

fprintf(file, "blabla1""blabla2%s""blabla3", mystring);

我从未见过我们可以在fprintf的第二个参数中放入几个字符串,这是一种连接吗?或者这是fprintf的一个功能?如果是这样,fprintf的规范没有提到它?

4 个答案:

答案 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)

我将依次回答每个问题。

  • 这是一种串联吗?

你击中了头部的钉子。确实是的。

  • 或者这是fprintf的一个功能吗?

不,只是C语法的一部分。

  • 如果是这样,fprintf的规格没有提到它?

这实际上不是一个问题,尽管有标点符号,但你可能正确的说fprintf规范没有提到这种类型的连接,那是因为它是语言的一部分,而不是特定的功能。 / p>

答案 3 :(得分:0)

在您显示的代码中,只有一种格式代码:"%s"。它接受mystring中包含的值,因此结果将是:“blablablabla2_contents of mystring_blabla3”

是的,这是合法代码。我不知道为什么有人会这样做。