我对 c++ 中的 fgets 有问题

I have an issue with fgets in c++

本文关键字:有问题 fgets 中的 c++ 我对      更新时间:2023-10-16

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

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: "aaa

等。。

这将读取 15 个字符

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

有谁知道为什么会发生这种情况以及是否有更好的方法可以做到这一点?谢谢

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

也似乎您有一个"次要"缓冲区溢出。 buf 大小为 15,您正在阅读 16 个字符。