我有一个简单的文件,其中包含100个文件名列表及其相应的大小,如下所示:
file1.txt, 4000
file2.txt, 5000
等。 如何逐行读取文件,然后将文件名列表存储到char数组中,然后将大小列表存储到int数组中?我试图使用像这样的sscanf,但这不起作用。我得到了一个段错:
main(){
char line[30];
char names[100][20];
int sizes[100];
FILE *fp;
fp = fopen("filelist.txt", "rt");
if(fp == NULL){
printf("Cannot open filelist.txt\n");
return;
}
while(fgets(line, sizeof(line), fp) != NULL){
sscanf(line, "%s, %d", names[i][0], sizes[i]);
printf("%d", sizes[i]);
i++;
}
}
答案 0 :(得分:2)
i
不会超过100
,这是可以读取的sizes
和names
的最大数量。如果文件中有超过一百行,则会发生越界访问。通过进行此(或类似)更改来防止这种情况:
while (i < 100 & fgets(line, sizeof(line), fp) != NULL) {
答案 1 :(得分:0)
#include <stdio.h>
int main()
{
char line[30];
char names[100][20];
int sizes[100];
int i = 0;
FILE *fp;
fp = fopen("1.txt", "rt");
if(fp == NULL)
{
printf("cannot open file\n");
return 0;
}
while(fgets(line, sizeof(line), fp) != NULL)
{
sscanf(line, "%[^,]", names[i]);//output the string until the char is the ","
sscanf(line, "%*s%s", sizes);//skip the characters and get the size of the file
printf("%s\n", names[i]);
printf("%s\n", sizes);
i++;
}
fclose(fp);
return 0;
}
我认为这就是你想要的。
你应该正确理解sscanf()。