вывод строки с разделением строки из файла пробелом - PullRequest
0 голосов
/ 03 ноября 2010

counter.txt

1 2 3
4 5 6
7 8 9

void  split_str(char line_str[10]) {

    int i, j;
    i=0;

    char  sub_str[10][20];   
    char  *token;

    token = strtok(line_str," ");     

    while (token != NULL) {
        strcpy(sub_str[i], token);   
        i=i+1;
        token=strtok(NULL," ");   
    }   

    for (j=0; j<=i; j++)
        printf("The char is %s\n",sub_str[j]);


} //split_str

void main() {

    file_ptr=fopen("counter.txt", "r");

    while ( fgets ( line, sizeof line, file_ptr ) != NULL ) { 
        split_str(line);
    }      

    fclose ( file_ptr );
}

Результат:
Символ 1
Символ 2
символ 3

символ。 "// пробел с двойной квотой
символ 4
символ 5
Символ 6

Символ。 "
Символ 7
Символ 8
Символ 9
Символ。"

- это пробел, этот веб-сайт урезан

есть символ "" "пробел с двойной квотой, что я неожиданно, что это?спасибо

1 Ответ

1 голос
/ 03 ноября 2010

То, что вы видите - это данные для мусора в sub_str, потому что этот код неверен:

while (token != NULL) {
    strcpy(sub_str[i], token);   
    i=i+1;
    token=strtok(NULL," ");   
}   

for (j=0; j<=i; j++)
    printf("%s\n",sub_str[j]);

Цикл for должен работать до j < i здесь.Это потому, что на sub_str[i] у вас просто есть какое-то фиктивное значение, так как после i=i+1 вы выходите из цикла while на токене NULL.

Попытайтесь смоделировать его "в своей голове" или запустить вотладчик, чтобы увидеть проблему в действии.

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