2

当我注意到这段代码时,试图找出函数中的堆栈损坏错误:

fprintf( fp, "\n%s %3c %12s %2c %12s %2c %12s %2c %12s %2c"
             "%12s %2c %12s", 
             xys_field[3],      x,
             xyzFunc(val1, 0),  x, 
             xyzFunc(val2, 0),  x, 
             xyzFunc(val3, 0),  x,
             xyzFunc(val4, 0),  x, 
             xyzFunc(val5, 0),  x, 
             xyzFunc(val6,0) );

我要问的是关于这条线"\n%s %3c %12s %2c %12s %2c %12s %2c %12s %2c" "%12s %2c %12s",我什至不明白它是如何编译的,因为我从未见过两种格式像这样相互跟随。谢谢你的帮助。

4

3 回答 3

6

这不是两种格式——注意没有逗号,或者除了空格之外没有任何分隔它们的东西。这是用于延续长字符串的 C 语法。在 C 中,这些是等价的:

"abc" "def"
"abcdef"

请注意,这仅适用于字符串文字;你不能连接字符串变量。这是一个语法错误:

string1 string2
于 2012-05-14T14:53:12.377 回答
2

在 C 中,并列的字符串文字(中间只有空格)表示单个字符串:

int main()
{
    puts("Hello, " "world!");
    return 0;
}

打印Hello, world!

于 2012-05-14T14:53:26.380 回答
1

这与格式说明符无关,而与 C 语言有关,允许您将字符串文字拆分为多个部分(例如,为了清晰起见跨行)并将其连接起来。

于 2012-05-14T14:53:37.000 回答