2010-09-28 59 views
0

我试图将char [256]写入文本文件。以下是我目前的工作:尝试将char []写入文本文件

  fstream ofs; 
     ofs.open("c:\\myURL.txt"); 
     ofs.write((char*)testDest,256); 
     ofs.close(); 

它仍然不起作用。

这里是错误:

错误C2440: '类型转换':不能从转换'到 '字符*'

更新:

到目前为止,这是我进步的尝试,该代码可以编译,但是在运行时,我的程序突然终止。

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; 

回答

4

几件事情错的或 “不好”:

  1. 你永远不会检查open是否失败。
  2. 您使用笨拙的write函数。
  3. 你不检查你的写作是否成功(如果你确信它会起作用,则不太必要)。

    #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; 
    } 
    

    我的猜测是,打开文件失败,因为你缺乏适当的权限:

如果事情失败,这会给你更多的信息。上面的程序会告诉你哪里失败。

UPDATE:要回答你的第二个问题:你这样做:

CBar* a; 

它创建了一个指针,但它留下unitiallized。然后,您需要解除引用它以访问其数据成员,这显然会导致崩溃。你需要初始化你的指针(或不要在这里使用一个指针,我看不出有任何理由):

// 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

什么是文件与“笨重的写功能”? – anno 2010-09-28 10:38:30

+0

嗯,需要'(char *)'强制转换,以及多余的长度规范(这是一个C++数组,长度是固定的)。 – rubenvb 2010-09-28 10:53:41

+0

流操作失败不应导致程序终止(除非显式调用'ios :: exceptions()'请求某些失败报告为异常)。我猜想一个糟糕的内存访问涉及到某个地方。 – 2010-09-29 00:34:36

5

您需要在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(); 
0

你忘了,如果有人试图检查文件是否存在,那么如果它不创造你必须使用fstream的为你的对象,就是为了不具备开放的2个不同的对象和写