2

次のコードスニペットは、TurboC++コンパイラで予期しない出力を提供します。

     char a[]={'a','b','c'};
     printf("%s",a);

なぜこの印刷されないのabcですか?私の理解では、文字列はCでは1次元の文字配列として実装されています。次に、と
の違いは何ですか?%s%2s

4

5 に答える 5

5

これは、文字列がゼロで終了していないためです。これはうまくいきます:

char a[]={'a','b','c', '\0'};

は、印刷出力の%2s最小幅を指定します。3 文字の文字列を出力しているため、これは無視されます。ただし、を使用%5sすると、文字列の左側に 2 つのスペースが埋め込まれます。

于 2012-05-04T19:15:39.657 に答える
3
char a[]={'a','b','c'};

問題の 1 つは、文字列を null で終了する必要があることです。

char a[]={'a','b','c', 0};
于 2012-05-04T19:15:43.297 に答える
2

元の文字配列を変更せずに使用することもできます

     char a[]={'a','b','c'};
     printf("%.3s",a);
or
     char a[]={'a','b','c'};
     printf("%.*s",sizeof(a),a);
or
     char a[]={'a','b','c'};
     fwrite(a,3,1,stdout);
or
     char a[]={'a','b','c'};
     fwrite(a,sizeof(a),1,stdout);
于 2012-05-04T21:14:23.890 に答える
1

文字列を使用していないためです。文字列と見なされるには、'null 終端': '\0' または 0 (はい、引用符なし) が必要です。

これは、次の 2 つの形式の初期化によって実現できます。

char a[] = {'a', 'b', 'c', '\0'};

またはあなたの側でコンパイラを使用して:

char a[] = "abc";
于 2012-05-04T19:20:23.210 に答える