gpt4 book ai didi

c - 如何在这里使用 fscanf 从文件写入变量?

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

我正在尝试读取包含一行“00:612:33188”的文件“data.txt”(每个数字代表一个数据字段,“changes:size:permission”),并将该信息写入一个结构。我想为这些字段中的任意数量的字符编写通用代码。

我的问题是关于 fscanf 的使用。我似乎无法让它发挥作用。以下代码产生段错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXHITS 50
#define FIELDMAX 100
#define TOTALELEMENTS 100000

typedef struct Elements{
char changes[FIELDMAX];
char size[FIELDMAX];
char permission[FIELDMAX];
} Elements;

int main(int argc, char const *argv[]) {
if(argc < 2) {
printf("\nSyntax: fscanf data\n\n");
exit(EXIT_FAILURE);
}

Elements total[TOTALELEMENTS];
Elements hits[MAXHITS];
int total_elements = 0;
int total_hits = 0;
FILE *fp;

// open the file and scan each field copying to the corresponding struct
fp = fopen (argv[1], "r");

if (fp){

fscanf(fp,"%99s:%99s:%99s", total[total_elements].changes,
total[total_elements].size, total[total_elements].permission);

printf("%s\n%s\n%s\n", total[total_elements].changes,
total[total_elements].size, total[total_elements].permission);

fclose (fp);
}

return 0;
}

最佳答案

"%s" 格式读取空格分隔 字符串。如果没有空间,它会尽可能多地贪婪地读取。

在您的情况下,这意味着整行将位于 changes 字段中,其余成员未初始化。

对于非空格分隔的记录,您可以将整行读入一个字符串,然后是 tokenize在分隔符上。

关于c - 如何在这里使用 fscanf 从文件写入变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495313/

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