繁体   English   中英

如何使用scanf \ fscanf读取一行并解析为变量?

[英]How to use scanf \ fscanf to read a line and parse into variables?

我正在尝试在每一行中读取使用以下格式构建的文本文件:

字符*,字符*,诠释

即:

AAAAA,dfdsd,23

bbbasdaa,DDD,100

我想使用fscanf从文件中读取一行,并自动将该行解析为varilables string1,string2,intA

这样做的正确方法是什么? 谢谢

假设你有:

char string1[20];
char string1[20];
int intA;

你可以这样做:

fscanf(file, "%19[^,],%19[^,],%d\n", string1, string2, &intA);

%[^,]读取一串非逗号字符,并在第一个逗号处停止。 19是要读取的最大字符数(假设缓冲区大小为20),因此您没有缓冲区溢出。

如果你真的不能对行的长度做出任何安全的假设,你应该使用getline()。 此函数有三个参数:指向字符串的指针(char **),指向包含该字符串大小的int的指针和文件指针,并返回读取行的长度。 getline()为字符串动态分配空间(使用malloc / realloc),因此您不需要知道行的长度,也没有缓冲区溢出。 当然,它不像fscanf那样方便,因为你必须手动分割线。

例:

char **line=NULL;
int n=0,len;
FILE *f=fopen("...","r");

if((len=getline(&line,&n,f)>0)
{
...
}

free(line);
fclose(f);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM