2

我目前正在研究 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.▒
4

1 回答 1

1

我看到这段代码有几个问题,首先

     str = LeftOver;

在这一行,LeftOver根本没有被初始化。但是你用它来初始化str. 你想制作 LeftOverstatic吗?

其次,你的测试LastToken

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

!lastToken因为在这条线之前它总是如此,所以它会消失false,你也想让它成为静态的吗?

于 2013-09-20T01:42:22.980 回答