トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> ネタ/ジョーク集 >> printf()関数誤動作?! (C言語)

printfの誤動作?! - C言語標準関数のバグについて

C言語のネタをもう1つ御提供~^^;)

------------------------------------------------------------------------------

C言語の標準関数であるprintf()、
おそらくC言語における最も使用頻度の高い関数であり、
様々なフォーマットを指定して値を出力できることは、周知の事実です。
(例えば "%03d"とフォーマットを指定すると、指定した値を3桁のゼロ詰めで表示します)


しかし、しかし、・・・

#include <stdio.h>

int main(void)
{
    printf("  1 ⇒ %03d\n", 001);
    printf(" 10 ⇒ %03d\n", 010);
    printf("100 ⇒ %03d\n", 100);

    return 0;
}
上記コードを実行してみると、おかしな現象が生じます。 "%03d"とフォーマットを指定している為、予想では、 ------------- 1 ⇒ 001 10 ⇒ 010 100 ⇒ 100 ------------- と出力されるはずなのですが、結果は以下の様になります。 printfの) つまり、本来「10」が表示されるべきところを、何故か「8」が表示されている! という不思議 orz ------------------------------------------------------------------------------ ・・・さて、如何でしょう?? 皆さんはこのコードの謎を解くことが出来ますでしょうか^^;) どうしてもこのコードの謎を解くことが出来ない人の為に、↓にヒントを書いておきます。 (見る場合は反転させて下さい。)
数値の先頭に「0x」をつけると、コンパイラはその値を16進数と見なします。 同様に、数値の先頭に「0」をつけると、コンパイラはその値を8進数と見なします。
さて、もう分かりましたよね??^^;) それにしても、種明かしされると、無性に悔しくなります(涙)
関連ページ : 知られざるC言語の演算子
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。