2012-04-29 70 views
1

我有了這樣的100文件名和對應的尺寸列表一個簡單的文件的字符串:你怎麼拆分從文件中讀取到數組用C

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++; 
    } 
} 
+1

可能重複(http://stackoverflow.com/questions/1861007/reading-a-file-line-by-line-in-c) – 2012-04-29 22:06:01

+1

'我'宣佈/初始化在哪裏? – hmjd

回答

2

i不超過100,這是可以讀取的sizesnames最大數量阻止。如果文件中有超過一百行,則會出現越界訪問。通過使本(或類似)的變化防止這種情況:

while (i < 100 & fgets(line, sizeof(line), fp) != NULL) { 
+0

謝謝大家!它現在正在工作:) –

+0

@IlanaMannine,你改變了什麼? – hmjd

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()。 [通過在C線讀取文件線]的

enter image description here