バグ:文字列(ロケール)の比較で予想外の動作となる

Posted: 2013年08月26日

文字列の比較ににより問題となる処理を紹介します。
今回はロケールを考慮した比較を対象としています。

プログラムプログラム:

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

 int main(int argc, char *argv[])
 {
    char *pszSrc = "aaa";

    if (0 < strcmp(pszSrc, "AAA")) {
        // 処理

    }

    return 0;
 }

このプログラムにどのように文字列の比較に問題が存在すると思いますか?



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

バグ:文字列(数値)の比較で予想外の動作となる

Posted: 2013年08月19日

文字列の比較ににより問題となる処理を紹介します。

プログラムプログラム:

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

 int main(int argc, char *argv[])
 {
    char *pszSrc = "1234";

    if (0 < strcmp(pszSrc, "234")) {
        // 処理

    }

    return 0;
 }

このプログラムにどのように文字列の比較に問題が存在すると思いますか?



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

C言語入門(53) 実際にプログラムを読んで理解を深めよう tail編(8)

Posted: 2013年08月15日

前回は、逆読みモード(reverse)の読み込み処理です。
今回は、逆読みモードのファイル読み込み処理について記載します。



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

バグ:浮動点小数を文字列化した際に出るかもしれない問題

Posted: 2013年07月22日

数値の文字列化により問題となる処理を紹介します。

プログラムプログラム:

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

 int main(int argc, char *argv[])
 {
    double nVal = 1.2346789;
    char szVal[16];

    sprintf(szVal, "%lf", nVal);

    // 処理

    return 0;
 }

このプログラムにどのように数値の文字列化処理に問題が存在すると思いますか?



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

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

Posted: 2013年07月15日

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

プログラムプログラム:

 #include <stdio.h>

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

    vprintf("%s", cSrc);

    // 処理

    return 0;
 }

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



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

バグ:文字列中の文字を正しく判断するためには

Posted: 2013年07月08日

文字の種類を判断するプログラムで書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

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

    // 入力要求
    if (isascii(cSrc) == 0) {
        return;
    }

    // 処理

    return 0;
 }

このプログラムにどのように文字の種類を判断する処理にバグが存在すると思いますか?



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

バグ:文字列の反転をした場合問題ありますか

Posted: 2013年07月02日

文字列操作(文字列の反転)で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>
 #include <string.h>

 int main(int argc, char *argv[])
 {
    const TCHAR *pszSrc = _T("ABCDEF");
    TCHAR *pszRev = _strrev(pszSrc);

    // 処理

    return 0;
 }

このプログラムにどのように文字列操作(文字列の反転)にバグが存在すると思いますか?



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

バグ:文字列配列の初期化でゴミが残る

Posted: 2013年06月24日

文字列操作(文字列の初期化)で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>
 #include <string.h>

 int main(int argc, char *argv[])
 {
    TCHAR strDest[256];
    strset(szDest, NULL);

    // 処理

    return 0;
 }

このプログラムにどのように文字列操作(文字列の初期化)にバグが存在すると思いますか?



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

バグ:環境変数の変更処理でたまに異常な状況となる

Posted: 2013年06月17日

文字列中に環境変数を変更する処理でよく書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>
 $include <winbase.h>

 int main(int argc, char *argv[])
 {
    TCHAR *pszEnv;
    pszEnv = _tgetenv(_T("JAVA_HOME"));

    if (strlen(pszEnv) == 0) {
        strcpy(pszEnv, _T("C:Program filesJavabin"));
    }

    // 処理

    return 0;
 }

このプログラムにどのように文字列中に環境変数を変更する処理が間違えていると思いますか?



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

バグ:大文字・小文字変換区別せずに比較できたと思ったら

Posted: 2013年06月10日

文字列操作(大文字・小文字変換)で書いてしまうバグを紹介します。

プログラムプログラム:

 #include <stdio.h>

 int main(int argc, char *argv[])
 {
    char *pArg = _strupr(argv);

    if (strstr(pArg, "-A") == NULL) {
        printf("%sは指定できません", argv);
        return -1;
    }

    // 処理

    return 0;
 }

このプログラムにどのように文字列操作(大文字・小文字変換)にバグが存在すると思いますか?



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