バグ:文字列の初期化表示でビルドエラー

Posted: 2013年07月15日

文字列の書式化表示を行うプログラムで書いてしまうバグを紹介します。
ビルド時にエラーとなると思いますが

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    char cSrc = 'a';

    vprintf("%s", cSrc);

    // 処理

    return 0;
 }

このプログラムにどのように文字列の書式表示する処理にバグが存在すると思いますか?

  • この使用方法では、vprintfを使用することができずprintfを使用すべき

改善版プログラム改善版プログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    char *szSrc = "a";

    printf("%s", szSrc);

    // 処理

    return 0;
 }

解説解説:

簡単な対応であり

つまらない修正のため
vprintfの場合も用意いたしました。

改善版プログラム改善版プログラム:

 #include <stdio.h>
 #include <stdlib.h>
 #inclde <stdarg.h>

 int customPrintf(const char *format, ...)
 {
    va_list arg;

    va_start(arg, format);
    vprintf(format, arg);
    va_end(arg)

    return EXIT_SUCCESS;
 }

 int main(int argc, char *argv[])
 {
    char *szSrc = "a";

    customPrintf("%s", szSrc);

    // 処理

    return 0;
 }

解説解説:

もともと可変長引数を受け取る関数の
デバッグメッセージ出力に使用することができます。

基本的には、printfを使用しますが。

知っていて損はないですが
違いを知らないと無駄に時間を使うだけなので

カテゴリー: バグ, プログラム | タグ: , , | コメント無し »

コメント