尝试将char []写入文本文件

时间:2010-09-28 09:22:15

标签: c++ iostream

我试图将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;

3 个答案:

答案 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)

代码中有些错误或“不好”:

  1. 您永远不会检查open是否失败。
  2. 您使用笨重的write函数。
  3. 你不会检查你的写作是否成功(如果你确定它会起作用,则不是很必要)。
  4. 如果出现问题,这将为您提供更多信息:

    #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个不同的对象用于打开和写入