为什么用\ n strtok只读取txt文件的第一行?

时间:2018-10-21 03:29:30

标签: c

我在strtok上遇到了一些问题,我试图在C语言代码中从文本文件中读取内容,但是只读取了第一行,因为某些原因,变量{{ 1}}变成第一行之后的arq

txt:

NULL

代码:

ola
oi
a
b
e
z

1 个答案:

答案 0 :(得分:3)

strtok不会从文件中读取,它会拆分字符数组。根据定义,fgets()读取一行,包括尾随换行符(如果文件中存在的话),因此strtok()仅拆分单个项目。而不是fgets(),您应该尝试使用fread()读取整个文件,并在strtok()循环之前将null终止数组:

#include <stdio.h>
#include <string.h>

void le_arquivo(char *optarg) {
    FILE *respostas;                
    char *arq;                      
    char resp[SBUFF];              
    char *tokens[SBUFF];           
    int n, c;

    respostas = fopen(optarg, "r");
    if (respostas == NULL) {
        printf("Erro ao abrir o arquivo\n");
        return;
    }
    n = fread(resp, 1, sizeof(resp) - 1, respostas);
    resp[n] = '\0';
    arq = strtok(resp, "\n");
    for (c = 0; arq != NULL; c++) {
        tokens[c] = arq;
        arq = strtok(NULL, "\n");
    }
    fclose(respostas);
    organiza_dados(tokens, c);
}