0

誰かが次の出来事を私に説明できますか?

unsigned int i;
i = strlen("testData");
printf("%d\n", i);

Output:
8
5

余分な5を印刷しているのはなぜですか?

[更新:] コメントを読んだ後、愚かにも 5 がどこから来ているのかわかりました。申し訳ありません!

4

3 に答える 3

1

strlen は文字列の長さを表します。では、見てみましょう... 「testData」。

1 - 't' 2 - 'e' 3 - 's' 4 - 't' 5 - 'D' 6 - 'a' 7 - 't' 8 - 'a'.

私たちは 8 を数えました。
今、私は 8 です。

So, printf("%d\n", i);
8を印刷します。

そして後で、プログラムに 5 を出力するコードがいくつかあります。コードが表示されないため、理由を説明できません

于 2010-10-23T21:12:53.373 に答える
0

このコード スニペットは 8 を出力する必要があります。このコード セクション以外に 5 を出力するものがあります。

于 2010-10-23T21:15:22.287 に答える
0

考えられる説明の 1 つは、符号付き整数 ( ) のフォーマット仕様を使用しているがパラメーターを渡しているため、動作が未定義であるということです。正しい呼び出しは次のようになります。%dunsigned intprintf

printf("%u\n", i);

可能性は低いですが、考えられる説明の 1 つは、実装での未定義の動作により余分な 5 が出力されることです。

于 2010-10-23T21:12:55.603 に答える