如何将从文件中读取的字符串拆分为C中的数组

时间:2012-04-29 22:04:51

标签: c arrays file

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

2 个答案:

答案 0 :(得分:2)

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

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()。

enter image description here