0

我正在制作一个使用 cgi 访问 mysql 中的表/数据库的 html 网页。我输入了一个 .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()解析过 info 行。由于不需要的字符行不包含逗号(这是我的分隔符),它应该返回一个 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 回答