我正在做一个小练习来读取一个包含一个长字符串的文件并将其加载到一个字符串数组中。到目前为止我已经:
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:“aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaahhhhhbbbbdddddddddddddbbbbb”
等等..
这会读取 15 个字符,将该字符串添加到数组中并获取下一个 15 个字符。问题是数组始终等于最后一个字符串,因此如果最后一个字符串是“ccccv”整个数组,则 data[0] = “ccccv”,数据[1] =“ccccv”,数据[2] =“ccccv”等等。
有谁知道为什么会发生这种情况以及是否有更好的方法?谢谢
最佳答案
data
中的每个指针都会指向同一个内存区域,即buf
。
您需要使用 strcpy
+ malloc
。
此外,您似乎还有“轻微”缓冲区溢出。 buf
的大小为 15,您正在读取 16 个字符。
关于c++ - 我在 C++ 中遇到 fgets 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10285148/