我生成了一个简单的制表符分隔文件,格式如下:
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 :(得分:2)
array[index] = n ;
指向n
缓冲区。所有数组元素都将指向相同的缓冲区n
。并n
将保留sscanf()
因此,每次使用n
n
缓冲区时,您必须创建sscanf()
缓冲区的重复内存
所以改变
array[index] = n ;
到
array[index] = strdup(n) ;