Strtok Задачи C (персонажи EOF?) - PullRequest
       14

Strtok Задачи C (персонажи EOF?)

0 голосов
/ 31 декабря 2011

код, который я пытаюсь написать, должен читать текст из txt-файла и разделять на строки. Я пришел к следующему коду:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
    FILE *fp;
    int i=0;
    char *words=NULL,*word=NULL,c;
    if ((fp=fopen("monologue.txt","r"))==NULL){ /*Where monologue txt is a normal file with plain text*/
        printf("Error Opening File\n");
        exit(1);}
    while ((c = fgetc(fp))!= EOF){
        if (c=='\n'){ c = ' '; }
        words = (char *)realloc(words, ++i*sizeof(char));
        words[i-1]=c;}
    word=strtok(words," ");
    while(word!= NULL){
        printf("%s\n",word);
        word = strtok(NULL," ");}
    exit(0);
}

Проблема в том, что вывод, который я получаю, - это не только текст (теперь в виде отдельных строк), но также некоторые символы, которые являются \ r (то есть возврат каретки), но также \ 241 \ r \ 002, которые я не могу найти что они? Вы можете мне помочь?

1 Ответ

2 голосов
/ 31 декабря 2011

Основная проблема заключается в том, что вы никогда не помещаете нулевой терминатор в конец строки, которую вы строите.

Изменение:

    while ((c = fgetc(fp))!= EOF){
        if (c=='\n'){ c = ' '; }
        words = (char *)realloc(words, ++i*sizeof(char));
        words[i-1]=c;}
    word=strtok(words," ");

Кому:

    while ((c = fgetc(fp))!= EOF){
        if (c=='\n'){ c = ' '; }
        ++i;
        words = (char *)realloc(words, i + 1);
        words[i-1]=c;}
    words[i] = '\0';
    word=strtok(words," ");
...