2013-06-19 21 views
1

我生成是下列格式的簡單的製表符分隔的文件:試圖讀取製表符分隔字符串的文件,並將它們放入數組並輸出,但我只得到一個字符?

a aa aaa 
b bb bbb 
... 
... 
y yy yyy 
z zz zzz 

我試圖讀取文件線由行,並把字符串轉換爲一個字符串數組,然後輸出字符串數組的內容。這裏是我的代碼:

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int BUF = 1024; 
    FILE * fp; 
    char * line = NULL; 
    size_t len = 0; 
    fp = fopen("~/testdataStrings.txt", "r") ; 
    ssize_t read; 


    char n[BUF] ; 
    int offset,index = 0 ; 
    while ((read = getline(&line, &len, fp)) != -1) { 
     char* array[3] ; 
     index = 0 ; 
     while (1 == sscanf(line, "%s%n[^\n]", n, &offset)) { 
      // printf("%s\n", n) ; //n contains the proper value, a,aa,or aaa 
      array[index] = n ; 
      line += offset ; 
      index++ ; 
     } 


     int i = 0; 
     while(i < 3) { 
      printf("%s\n", array[i]) ; 
      i++ ; 
     } 
    } 
} 

預期輸出是:A,AA,AAA,B,BB,BBB等通過換行分隔,但我正在逐漸:AAA,AAA,AAA,BBB,BBB,BBB等由換行符分隔?我哪裏做錯了?

謝謝。

+0

'char * array [3]'聲明指向char的指針數組而不是數組o f字符串。所以要麼動態分配它們,要麼聲明類似於char數組[3] [BUF]的東西。 – VoidPointer

回答

2
array[index] = n ; 

指向n緩衝區。所有數組元素將指向相同的緩衝區n。和n將繼續由sscanf()

閱讀最後一個字符串所以,你必須創建n一個重複記憶,每次緩衝您填寫的n緩衝與sscanf()

因此改變

array[index] = n ; 

array[index] = strdup(n) ; 
相關問題