c - 在 C 中构建格式字符串

标签 c file-io format

我有一个名为 FOO 的结构,它将填充来自具有柱状数据的文件中的数据:

JohnDoe 30 60 90 120
JaneDoe 20 40 80 160
...

typedef struct FOO {
char *name;
int  *data;
size_t datasize;

} FOO;

...和一个名为 fillFOO(FILE *fp) 的函数,它为该结构分配空间并用文件中的数据填充该结构。我一直在尝试类似的事情

formatString = myFormatStringBuilder();

然后以一种相当笨拙的方式将 formatString 传递给 sscanf:

fscanf(fi, formatString, pointerToA_FOO->name, pointerToA_FOO->data[0], 
       pointerToA_FOO->data[1], ...); /* Argh! There has to be an easier way...*/

是否有更简单/更清晰的方式来读取此文件?

最佳答案

更简单/更清洁?此行根本不起作用:

fscanf(fi, formatString, pointerToA_FOO->name, pointerToA_FOO->data[0], ...

因为可变参数应该是左值。

此外,如果总是有 5 列,那么您不需要 myFormatStringBuilder()完全:

FOO* f = malloc(sizeof(FOO));
f->name = malloc(100); // or whatever
f->data = malloc(4*sizeof(int));
fscanf(fi, "%s %u %u %u %u", f->name, &f->data[0], 
         &f->data[1], &f->data[2], &f->data[3]);

编辑: 好的,所以不同文件的列数是不一样的。你可以做的是: 首先通过读取第一行(即 getline )找出文件中有多少列,并计算空格数,然后 malloc 而不是 4 ,然后对于每一行:fscanf(fi, "%s", f->name);for(int i=0; i<spaces; ++i) { fscanf(fi, "%u", &f->data[i]); }

关于c - 在 C 中构建格式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14884296/

相关文章:

c - 如何修复无效转换错误? (字符到常量字符*)

java - 获取 FileInputStream 使用的文件

MySQL日期型DATE格式存储

c - 在嵌入式 Linux 中是否可以同时导出多个 GPIO?

c - 使用 sigusr1 和 sigusr2 进行进程同步

c - 如何在 ANSI C 程序中返回字符串数组?

java - 当我的文件确实存在时,出现文件未找到异常

python - 如何在命令行中将参数传递给文件并使用 python 更改文件中的字符串?

javascript - 将数字格式化为美元

sql-server - 将 SQL Server 数据库而非整个服务器上的日期格式更改为 dd/mm/yyyy