我在strtok
上遇到了一些问题,我试图在C语言代码中从文本文件中读取内容,但是只读取了第一行,因为某些原因,变量{{ 1}}变成第一行之后的arq
。
txt:
NULL
代码:
ola
oi
a
b
e
z
答案 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);
}