如何在这里使用fscanf从文件写入变量?
我试图读取一个文件data.txt,其中只有一行00:612:33188,每个数字代表一个数据字段,changes:size:permission,并将该信息写入一个结构。我想为这些字段中任意数量的字符编写代码 我的问题是关于fscanf的使用。我似乎无法使它工作。以下代码生成分段错误如何在这里使用fscanf从文件写入变量?,c,stream,segmentation-fault,scanf,C,Stream,Segmentation Fault,Scanf,我试图读取一个文件data.txt,其中只有一行00:612:33188,每个数字代表一个数据字段,changes:size:permission,并将该信息写入一个结构。我想为这些字段中任意数量的字符编写代码 我的问题是关于fscanf的使用。我似乎无法使它工作。以下代码生成分段错误 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXHITS 50 #define F
#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字段中,剩下的成员未初始化
对于非空格分隔的记录,您可以将整行读取为字符串,然后在分隔符上执行操作。使用%s格式读取空格分隔的字符串。如果没有空间,它会贪婪地阅读尽可能多的内容
在您的情况下,这意味着整行将在changes字段中,剩下的成员未初始化
对于非空格分隔的记录,您可以将整行内容读入字符串,然后在分隔符上进行分隔。SEGFULT的可能罪魁祸首是巨大的局部变量total 100000*300字节。您会得到调用堆栈溢出。
如果您将TOTALELEMENTS减少到100,那么您的代码将与我的测试文件一起工作 SEGFULT的罪魁祸首可能是巨大的局部变量总和 100000*300字节。您会得到调用堆栈溢出。
如果您将TOTALELEMENTS减少到100,那么您的代码将与我的测试文件一起工作 99的目的是什么?SIGSEGV的原因很可能是:@nicomp,因为我认为fscanf是如何工作的。FIELDMAX是100,我想在第100位,fscan会写一个“\0”99是干什么的?SIGSEGV的原因很可能是:@nicomp,因为我认为fscanf是如何工作的。FIELDMAX是100,我认为在第100位,fscan会写一个“\0”或作为数字数据读取,那么:,就可以工作了。如果需要,您始终可以将其转换回0填充字符串。或者将其读取为数字数据,则:将起作用。如果需要,您始终可以转换回0填充字符串。
#define MAXHITS 50
#define FIELDMAX 100
#define TOTALELEMENTS 100000
typedef struct Elements{
char changes[FIELDMAX];
char size[FIELDMAX];
char permission[FIELDMAX];
} Elements;
int main () {
...
Elements total[TOTALELEMENTS];
}