我在c ++中遇到了fgets的问题

时间:2012-04-23 17:20:01

标签: c++ file fgets

我正在做一个小练习来读取包含一个长字符串的文件并将其加载到一个字符串数组中。到目前为止,我有:

char* data[11];
char buf[15];
int i = 0;

FILE* indata; 
indata = fopen( "somefile.txt", "r" );
while( i < 11)
{
    fgets(buf, 16, indata);
    data[i] =  buf;
    i++;
}

fclose( indata );

somefile.txt:“aaaaaaaaaaaaaaaaaaaaaaaabbbbbbahhhhhbbbbdddddddbbbbdbdbdbdbbbbbbbbbbbb”

等。

这读取15个字符,将该字符串添加到数组并获取下一个15。问题是数组总是等于最后一个字符串,所以如果最后一个字符串是“ccccv”整个数组,data [0] = “ccccv”,data [1] =“ccccv”,data [2] =“ccccv”等。

有谁知道为什么会这样,是否有更好的方法呢?感谢

1 个答案:

答案 0 :(得分:2)

data中的每个指针都指向相同的内存区域,即buf。 您需要使用strcpy + malloc

似乎你有一个“次要”缓冲区溢出。 buf的大小为15,你读的是16个字符。