所以我正在编写代码将字符串放入数组中,它工作得很好,但是我希望它在我在文件中点击 ## 时终止字符串的读取。我正在运行一个循环并逐行解析字符串。在我的字符串解析器中,我放置了一个循环来检查 ##。它位于我的解析器函数的最后,它是:
for (i = 0; i < strlen(line)); i++)
{
if ((buffer[i] == '#') && (buffer[i+1] == '#'))
{
return -1;
}
}
问题是,当它到达末尾带有 ## 的行时,它不会将字符串解析到我的数组中。看起来它只是忽略了这个循环之前的代码。
作为附加信息,我使用 strtok 将标记放入 for 循环之前的 char* 数组中的位置。
编辑:这是我的 parseString 函数:
int parseString(char* line, char*** inString)
{
char* buffer;
int Token, i;
buffer = (char*) malloc(strlen(line) * sizeof(char));
strcpy(buffer,line);
(*inString) = (char**) malloc(MAX_TOKS * sizeof(char**));
Token = 0;
(*inString)[Token++] = strtok(buffer, DELIMITERS);
while ((((*inString)[token] = strtok(NULL, DELIMITERS)) != NULL) && (Token < MAX_TOKS))
Token++;
for(i=0; i<strlen(line); i++)
{
if ((buffer[i] == '#') && (buffer[i+1] == '#'))
{
return -1;
}
}
return Token;
}
最佳答案
首先,您在数组上读取越界,因为 array[-1]
不好。其次,使用变量来保存字符串长度,因为这样做会导致 for 循环为每次迭代重新计算 strlen(line)
。
现在,对于您的问题,似乎您将其放在将其添加到数组的代码之前。如果您能给我们更多的代码,那将会有所帮助。
关于c - 返回-1时strtok消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19176454/