【发布时间】:2013-10-04 08:17:05
【问题描述】:
所以我正在编写将字符串放入数组的代码,并且它运行良好,但是我希望它在我点击文件中的 ## 时终止字符串的读取。我正在运行一个循环并逐行解析字符串。在我的字符串解析器中,我放置了一个循环来检查##。它在我的解析器函数的最后,它是:
for (i = 0; i < strlen(line)); i++)
{
if ((buffer[i] == '#') && (buffer[i+1] == '#'))
{
return -1;
}
}
问题是,当它到达最后带有## 的行时,它不会将字符串解析到我的数组中。似乎只是忽略了此循环之前的代码。
作为附加信息,我使用 strtok 将标记放在我的 char* 数组中的位置,然后再进行 for 循环。
编辑:这是我的 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;
}
【问题讨论】:
-
请不要在 for 循环条件中调用
strlen(line)并尝试更好地格式化您的代码。 -
如果 i == 0,它不会在缓冲区 [i-1] 上崩溃吗?
-
我们能看到剩下的代码吗?前提是它不是很大。
-
我刚刚进行了编辑,以便您可以看到该函数的整个代码。
-
天哪。你知道你可以在一个块中标记多行代码吗?