Так что я пишу код, чтобы поместить строки в массивы, и он работает отлично, однако я хочу, чтобы он завершил чтение строк при ударе ## в файле. Я запускаю цикл и разбору строк последовательно. Внутри синтаксического анализатора строк я поставил цикл для проверки ##. Это в самом конце моей функции синтаксического анализа, и он идет:strtok исчезает при возврате -1
for (i = 0; i < strlen(line)); i++)
{
if ((buffer[i] == '#') && (buffer[i+1] == '#'))
{
return -1;
}
}
Проблема заключается в том, что, когда он попадает в линию с ## в конце концов, это не разобрать строку в моем массиве. Похоже, что он просто игнорирует код перед этим циклом.
В качестве дополнительной информации я использую strtok для размещения маркеров в позициях в моем массиве char * до этого цикла.
EDIT: Вот моя 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;
}
Просьба не называть 'strlen (line)' в условном выражении for и пытаться отформатировать код немного лучше. – goji
Неужели это не сбой на буфере [i-1], если i == 0? – duDE
Можем ли мы увидеть остальную часть кода? При условии, что он не огромен. – goji