C ++ strTok实现返回奇怪的字符

时间:2013-09-20 01:19:36

标签: character strtok

我目前正在使用C ++中的字符串标记生成器,并得到一个奇怪的结果。

    char *mystrtok(char *str, const char *delim)
    {
        char * LeftOver;
        bool lastToken;
        int i=0;    

        if(str != NULL)
        {
            LeftOver = str;
            lastToken = false;
        }else       
        {
            str = LeftOver;      
        }

        for(i = 0; str[i] != '\0'; i++)
        {            
            for(int j=0; delim[j] != '\0'; j++)
            {          
             //If I take out this line then it returns weird characters
                cout << "\tstr[" << i <<" ]" << "=" << str[i] << endl;
                if(LeftOver[i] == delim[j])
                {     
                    str[i] = '\0';
                    LeftOver = str + i+1;

                return str;
                }
            }
        }

        if(LeftOver[i] == '\0' && !lastToken)
        {
            lastToken = true;
            return str;
        }
        return NULL;
    }

真正奇怪的是,如果我取出cout然后它会返回奇怪的字符 知道是什么导致了这个吗?

这是一个示例输出

//passed
"ls -l -a | wc -c >>   myfile"
returned: ls
▒M.▒

1 个答案:

答案 0 :(得分:1)

我在这段代码中看到了几个问题,首先是

     str = LeftOver;

在此行,LeftOver尚未初始化。但是你用它来初始化str。你想制作LeftOver static

其次,您对LastToken

的测试
     if(LeftOver[i] == '\0' && !lastToken)

对于!lastToken,它会偏离正确,因为在此行之前它总是false,你想让它也是静态的吗?