誰かが次の出来事を私に説明できますか?
unsigned int i;
i = strlen("testData");
printf("%d\n", i);
Output:
8
5
余分な5を印刷しているのはなぜですか?
[更新:] コメントを読んだ後、愚かにも 5 がどこから来ているのかわかりました。申し訳ありません!
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 を出力するコードがいくつかあります。コードが表示されないため、理由を説明できません
このコード スニペットは 8 を出力する必要があります。このコード セクション以外に 5 を出力するものがあります。
考えられる説明の 1 つは、符号付き整数 ( ) のフォーマット仕様を使用しているがパラメーターを渡しているため、動作が未定義であるということです。正しい呼び出しは次のようになります。%d
unsigned int
printf
printf("%u\n", i);
可能性は低いですが、考えられる説明の 1 つは、実装での未定義の動作により余分な 5 が出力されることです。