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。あなたはLeftOverを作りたいstaticですか?

第二に、あなたのテストLastToken

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

!lastTokenこの行の前は常にであるため、それは true にfalseなります。これも静的にしたいですか?

于 2013-09-20T01:42:22.980 に答える