标记化c块中的分段错误

时间:2014-05-13 18:51:31

标签: c

我对指针等很新。这个函数应该采用一个字符数组并将其拆分为组成单词,除非有引号(然后引号中的所有内容都保存在一起)。

在添加对引号的支持之前,它工作得很好,但现在我遇到了分段错误。

int parse(char *line, char **args) {
    int argc = 0;

    while ( *line != '\0' ) {
        if ( *line == '\'' || *line == '\"' ) {
            *args++ = line;
            ++argc; ++line;

            while ( *line != '\'' || *line != '\"' )
                ++line;

            ++line;
        }
        else {
            while ( *line == ' ' || *line == '\t' || *line == '\n' )
                *line++ = '\0';

            *args++ = line;
            ++argc;

            while ( *line != '\0' && *line != ' ' && *line != '\t' && *line != '\n' )
                    ++line;
        }
    }

    *--args = '\0';

    return --argc;
}

2 个答案:

答案 0 :(得分:1)

line上方的内部循环存在缺陷,因为不检查字符串的结尾。这意味着如果字符串中没有结束引号,您将超出字符串的末尾。

答案 1 :(得分:0)

这会给你带来麻烦

       while ( *line != '\'' || *line != '\"' )
            ++line;

没有

  || *line != 0