当我注意到这段代码时,试图找出函数中的堆栈损坏错误:
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"
,我甚至不明白这是如何编译的,因为我从未见过两种格式如此相互跟随。谢谢你的帮助。
答案 0 :(得分:6)
这些不是两种格式 - 注意没有逗号,或者除了空格之外的任何东西。这是用于延续长字符串的C语法。在C中,这些是等价的:
"abc" "def"
"abcdef"
请注意,这仅适用于字符串文字;你不能连接字符串变量。这是语法错误:
string1 string2
答案 1 :(得分:2)
在C中,并列的字符串文字(中间只有空格)表示单个字符串:
int main()
{
puts("Hello, " "world!");
return 0;
}
打印Hello, world!
。
答案 2 :(得分:1)
这与格式说明符无关,而与C有关的所有内容都允许您拆分string literal into multiple parts(例如,为了清晰起见,跨行)并将其连接起来。