我目前正在使用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.▒
答案 0 :(得分:1)
我在这段代码中看到了几个问题,首先是
str = LeftOver;
在此行,LeftOver
尚未初始化。但是你用它来初始化str
。你想制作LeftOver static
?
其次,您对LastToken
,
if(LeftOver[i] == '\0' && !lastToken)
对于!lastToken
,它会偏离正确,因为在此行之前它总是false
,你想让它也是静态的吗?