我试图将char [256]写入文本文件。以下是我目前的工作:
fstream ofs;
ofs.open("c:\\myURL.txt");
ofs.write((char*)testDest,256);
ofs.close();
它仍然不起作用。
这是错误:
错误C2440:'type cast':无法从''转换为'char *'
更新
到目前为止,这是我的进度尝试,代码可以编译,但在运行时,我的程序突然终止。
ofstream stream;
CBar *a;
switch(uMessage) {
case WM_PAINT:
return bar->OnPaint();
case WM_ERASEBKGND:
return 1;
case WM_LBUTTONDOWN: //wira
if (!bar->OnClick(wParam, lParam)) {
stream.open("C:\\myURL.txt");
stream << a->testDest << endl; // if I replace `a->testDest` with "testword" string, my prgrom does not terminated. Why?
return 0;
}
break;
答案 0 :(得分:6)
您需要在 open()中传递 fstream ,这是您期望执行的操作:输入,输出,甚至两者兼而有之。你应该尝试:
ofs.open( "c:\\myURL.txt", ios::out | ios::text);
无论如何,最好使用 ofstream 而不是通用 fstream :
ofstream ofs;
ofs.open( "c:\\myURL.txt", ios::text );
ofs.write( (char*)testDest, 256 );
ofs.close();
答案 1 :(得分:6)
代码中有些错误或“不好”:
open
是否失败。write
函数。如果出现问题,这将为您提供更多信息:
#include <fstream>
using std::ofstream;
#include <iostream>
using std::cout;
using std::endl;
int main()
{
ofstream stream;
char charArray[] = "Some stuff in a char array.";
stream.open("C:\\myurl.txt");
if( !stream )
cout << "Opening file failed" << endl;
// use operator<< for clarity
stream << testDest << endl;
// test if write was succesful - not *really* necessary
if( !stream )
cout << "Write failed" << endl;
return 0;
}
我的猜测是打开文件失败,因为你缺少适当的权限。上述程序将告诉您失败的原因。
更新:回答第二个问题:你这样做:
CBar* a;
这会创建一个指针,但会将其保留为单元。然后,您希望取消引用它以访问其testDest
数据成员,这显然会导致崩溃。你需要初始化你的指针(或者不要在这里使用指针,我认为没有理由):
// Either this
CBar* a = new CBar(/*some arguments, or none, depending on CBar definition*/);
//...
cout << a->testDest << endl;
// Or this (better here in my opinion)
CBar a; // OK if there is a default constructor (one with no arguments);
//...
cout << a.testDest << endl;
请阅读有关c ++的任何优秀教程。如果你没有睡三天或者你不理解语言的基本概念,这些都是你犯的错误。
答案 2 :(得分:0)
你忘记了如果有人试图检查文件是否存在,那么如果它没有创建文件你就必须使用fstream作为你的对象,所以不会有2个不同的对象用于打开和写入