gpt4 book ai didi

c - 为什么strtok带\n,只读取txt文件的第一行?

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:32 27 4
gpt4 key购买 nike

我在使用 strtok 时遇到了一些问题,我正在尝试在我的 C 代码中从文本文件中读取,但是,只读取了第一行,因为出于某种原因,变量 arq 在第一行后变为 NULL

文本:

ola
oi
a
b
e
z

代码:

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

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

最佳答案

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);
}

关于c - 为什么strtok带\n,只读取txt文件的第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52911898/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com