c++ - 我在 C++ 中遇到 fgets 问题

标签 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:“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/

相关文章:

c - C中fgets()引起的段错误

c++ - 在 Qt 组合框中设置项目

c++ - 在 C++ 中给出错误结果的复数方程

java - 文件存在且是目录,但 listFiles() 返回 null

C程序只在调试时写入文件

如果文件存在,调用 open() 创建文件失败

c - 获取 N 个字符串的输入时出现 fgets()/gets() 问题。在初始位置不接受输入

c - fgets() 保存跳行字符,而不是跳过输入

setter中的c++字符串操作

c++ - 我的 map 迭代器无法访问 map 的每个元素,我该如何解决?