试图读取制表符分隔的字符串文件并将它们放入数组并输出,但我只获得一个字符?

时间:2013-06-19 14:51:39

标签: c arrays string scanf

我生成了一个简单的制表符分隔文件,格式如下:

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等由换行符分隔?我哪里做错了?

感谢。

1 个答案:

答案 0 :(得分:2)

array[index] = n ;

指向n缓冲区。所有数组元素都将指向相同的缓冲区n。并n将保留sscanf()

读取的最后一个字符串

因此,每次使用n

填充n缓冲区时,您必须创建sscanf()缓冲区的重复内存

所以改变

array[index] = n ;

array[index] = strdup(n) ;