Я просто пытаюсь вернуть каждое слово в строке, но strtok возвращает первое слово, а затем сразу же возвращает null:
int main(int argc, char *argv[]) {
// Get the interesting file contents
char *filestr = get_file(argv[1]);
printf("%s\n", filestr);
char *word;
word = strtok(filestr, ";\"'-?:{[}](), \n");
while (word != NULL) {
word = strtok(NULL, ";\"'-?:{[}](), \n");
printf("This was called. %s\n", word);
}
exit(0);
}
get_file просто открывает указанный путь и возвращает содержимое файла в виде строки. Команда printf("%s\n", filestr);
, показанная выше, успешно распечатывает любой файл целиком. Следовательно, я не думаю, что get_file() является проблемой.
Если я вызову strtok для char test[] = "this is a test string"
вместо filestr, то он правильно вернет каждое из слов. Однако, если я сделаю содержимое файла, полученного с помощью get_file(), «это строка», тогда он вернет «это», а затем (ноль).
По запросу вот код для get_file():
// Take the path to the file as a string and return a string with all that
// file's contents
char *get_file (char *dest) {
// Define variables that will be used
size_t length;
FILE* file;
char* data;
file = fopen(dest, "rb");
// Go to end of stream
fseek(file, 0, SEEK_END);
// Set the int length to the end seek value of the stream
length = ftell(file);
// Go back to the beginning of the stream for when we actually read contents
rewind(file);
// Define the size of the char array str
data = (char*) malloc(sizeof(char) * length + 1);
// Read the stream into the string str
fread(data, 1, length, file);
// Close the stream
fclose(file);
return data;
}
strtok()
выглядит нормально. Одна проблема (возможно, не связанная с этой проблемой) заключается в том, чтоget_data()
не завершает нулем строку, которую он читает. Это просто текстовый файл, который вы ему даете? - person FatalError   schedule 05.02.2012