Попробуйте написать char [] в текстовый файл - PullRequest
0 голосов
/ 28 сентября 2010

Я пытаюсь записать символ [256] в текстовый файл.Ниже моя текущая работа:

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

Это все еще не работает.

здесь ошибка:

ошибка C2440: «приведение типа»: невозможно преобразовать из'to' char * '

обновление:

пока, вот моя попытка прогресса, код может скомпилироваться, но при запуске моя программа неожиданно прервалась.

Ответы [ 3 ]

6 голосов
/ 28 сентября 2010

Несколько ошибок или «нехорошо» в вашем коде:

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

Я предполагаю, что открытие файла не удалось из-за отсутствия необходимых разрешений. Приведенная выше программа скажет вам, где что не получается.

ОБНОВЛЕНИЕ : Чтобы ответить на второй вопрос: вы делаете это:

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 ++. Это ошибки, которые вы совершаете, если не спали в течение трех дней или не понимаете основных понятий языка.

6 голосов
/ 28 сентября 2010

Вам необходимо перейти к fstream , в open () , типу операции, которую вы ожидаете выполнить: ввод, вывод или даже оба.Вы должны попробовать:

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 голосов
/ 07 июля 2012

Вы забываете, что если кто-то пытается проверить, существует ли файл, то если он не создает файл, вы должны использовать fstream для своего объекта, чтобы не было 2 разных объектов для открытия и записи

...