0

cgi を使用して mysql のテーブル/データベースにアクセスする html Web ページを作成しています。クラスのスケジュールに関する情報を含む .csv ファイルを入力すると、html によって通常のスケジュール表に表示されます。

私の問題は、サーバーエラーが発生するため、解析中の cgi で strcmp を使用できないように見えることです。これは、strcmp を使用するコードの抜粋です。

void parse2(char *queu)
{
//---------------------------------------------------------------
    char *saveptr[1024];
    char *subtoken;
    char *Subject;
    char *Day;
    char *Start;
    char *End;
    char *Room;
    char *Teacher;
    int check = 1;
//---------------------------------------------------------------
    subtoken = strtok_r(queu, ",", saveptr);

    check = strcmp(subtoken, "\0");
    printf("%d<br>", check);

    if(check == 0){
        printf("Error!");
    } else {
        Subject = subtoken;
        Day = strtok_r(NULL, ",", saveptr);
        Start = strtok_r(NULL, ",", saveptr);
        End = strtok_r(NULL, ",", saveptr);
        Room = strtok_r(NULL, ",", saveptr);
        Teacher = strtok_r(NULL, ",", saveptr);

        printf("%s\n<br/>%s\n<br/>%s\n<br/>%s\n<br/>%s\n<br/>%s\n", Subject, Day, Start, End, Room, Teacher);

        //inputsql(Subject, Day, Start, End, Room, Teacher);
    }   
//---------------------------------------------------------------
}

このコードをテストしたところ、 を呼び出さなくても問題なく動作することに注意してくださいstrcmp()

メソッドstrcmp()を使用して情報を取得した後に生成された不要な文字の行がデータベースに入力されないようにするために使用しています。POST

上記のコードからわかるように、以前strtok()は情報の行を解析していました。不要な文字の行にはコンマ (区切り文字) が含まれていないため、NULL 値を返す必要があります。正しい?

誰でも私を助けることができますか?を使用して解決することを選択した問題を解決するために、別の方法を使用する提案を歓迎しstrcmp()ます。

4

1 に答える 1

0

subtoken == NULLではなく、チェックする必要があると思いますstrcmp(subtoken, "\0") == 0

"\0"は NUL バイトを含む文字列であり、次に別の NUL (ターミネータ) を含むため、標準ライブラリの文字列関数は空の文字列を認識します。これは、NULL ポインター (つまり、値がゼロのポインター) とは異なります。

からSTRTOK(3):

   Each call to strtok() returns a pointer to a null-terminated string
   containing the next token.  This string does not include the
   delimiting byte.  If no more tokens are found, strtok() returns NULL.
于 2013-08-29T13:19:34.833 に答える