Проблема с сохранением только первого токена - PullRequest
1 голос
/ 27 марта 2011

Вчера у меня была проблема с моей функцией, которая оказалась простым решением, и теперь у меня другая проблема, которая сбивает меня с толку.Функция является токенизатором:

void tokenizer(FILE *file, struct Set *set) {
     int nbytes = 100;
     int bytesread;
     char *buffer;
     char *token;
     buffer = (char *) malloc(nbytes + 1);
     while((bytesread = getLine(&buffer,&nbytes,file)) != -1) {
          token = strtok(buffer," ");
          while(token != NULL) {
              add(set,token);
              token = strtok(NULL," ");
          }
     }
}

Я знаю, что вход (текстовый файл) корректно разбивается на токены, потому что во втором цикле while я могу добавить printf ("% s", токен) кпоказать каждый токен.Однако проблема заключается в доп.Это только добавление первого токена в мой список, но в то же время все равно корректно разбивает каждый токен.Например, если бы мой входной текст был «бла герпес сумасшедший», я бы получил

токен = бла

токен = герп

токен = сумасшедшийсписок будет содержать только первый токен, бла.Я не верю, что проблема с add, потому что он работает сам по себе, то есть я мог бы использовать

add(set,"blah");
add(set,"herp");
add(set,"derp");

, и результатом будет список, содержащий все три слова.

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 27 марта 2011

strtok() возвращает указатель на строковый буфер.Вам нужно strdup() эту строку и добавить результат в ваше дерево.Не забудьте free() это когда вы очистите дерево.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...