C 为什么strtok with \n只读取txt文件的第一行?
我在使用strtok时遇到了一些问题,我正在尝试用C语言编写的代码从文本文件中读取,但是,只读取第一行,因为出于某种原因,变量C 为什么strtok with \n只读取txt文件的第一行?,c,C,我在使用strtok时遇到了一些问题,我正在尝试用C语言编写的代码从文本文件中读取,但是,只读取第一行,因为出于某种原因,变量arq在第一行之后变为NULL 文本: ola oi a b e z 代码: strtok不会从文件中读取,它会分割字符数组。根据定义,fgets()读取包含尾随换行符(如果文件中存在)的单行,因此strtok()仅拆分单个项目。您应该尝试使用fread()读取整个文件,而不是fgets(),并在strtok()循环之前以null终止数组: #include <s
arq
在第一行之后变为NULL
文本:
ola
oi
a
b
e
z
代码:
strtok
不会从文件中读取,它会分割字符数组。根据定义,fgets()
读取包含尾随换行符(如果文件中存在)的单行,因此strtok()
仅拆分单个项目。您应该尝试使用fread()
读取整个文件,而不是fgets()
,并在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);
}
#包括
#包括
void le_arquivo(char*optarg){
文件*respostas;
char*arq;
charresp[SBUFF];
字符*令牌[SBUFF];
int n,c;
respostas=fopen(optarg,“r”);
if(respostas==NULL){
printf(“Erro ao abrir o arquivo\n”);
返回;
}
n=fread(resp,1,sizeof(resp)-1,respostas);
resp[n]='\0';
arq=strtok(resp,“\n”);
for(c=0;arq!=NULL;c++){
令牌[c]=arq;
arq=strtok(空,“\n”);
}
fclose(respostas);
organiza_dados(代币,c);
}
非常感谢!你帮了我很多!成功了!我花了几天的时间在怀疑中!非常感谢。
#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);
}