私は現在、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.▒