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"。2つのフォーマットがこのように続くのを見たことがないので、これがどのようにコンパイルされるのかさえわかりません。助けてくれてありがとう。

4

3 に答える 3

6

これらは2つの形式ではありません。コンマがないか、空白以外の何かで区切られていることに注意してください。これは、長い文字列を継続す​​るための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 に答える