1

我有一个简单的文件,其中包含 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++;
    }
}
4

2 回答 2

2

i不防止超过,这是可以读取的和100的最大数量。如果文件中有超过一百行,则会发生越界访问。通过进行此(或类似)更改来防止这种情况:sizesnames

while (i < 100 & fgets(line, sizeof(line), fp) != NULL) {
于 2012-04-29T22:09:03.997 回答
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() 。

在此处输入图像描述

于 2012-04-30T04:22:45.900 回答