简单的FWrite出错了

时间:2014-06-20 08:56:08

标签: c++ fwrite

我有一个简单的问题,做一个fwrite,我不知道为什么。

我有:

std::string maLigne;
fwrite(maLigne, sizeof(maLigne), 1, fichierEcrit);

那让我回头:

invalid cast from type 'std::string {aka std::basic_string<char>}' to type 'void*'

我试试:

fwrite(&maLigne, sizeof(maLigne), 1, fichierEcrit);

但文件中没有任何内容,所以我认为这是错误的。

为什么这不起作用?

1 个答案:

答案 0 :(得分:4)

它无法正常工作,因为您尝试使用低级C函数将文件写入C ++对象。

如果要使用C fwrite函数,则必须将指针作为参数传递给数据所在的内存,每个元素的大小,元素的数量和文件句柄。 maLigne是基于堆栈的对象,而不是指针。 &maLigne是该对象的地址,但不是数据字符串所在的地址(位于堆中)。 sizeof(maLigne)是堆栈中对象的大小(总是相同,通常是两个指针大小,无论包含的数据如何),但不是字符串长度。

这就是错误。

因此,您需要知道字符串所在的指针(c_str()函数成员),元素大小(sizeof(char),因为string类与{{1}一起使用})和元素的数量(字符串长度:char成员函数)。

但最好使用C风格函数,最好使用I / O C ++函数:

size()

您还没有意识到缓冲区和大小,因为流对象(std::ofstream fichierEcrit("my_file_name"); std::string maLigne; fichierEcrit << maLigne; )上的运算符<<和字符串对象(fichierEcrit)为您管理。< / p>

相关问题