2010-09-28 6 views
0

J'essaie d'écrire un caractère [256] dans un fichier texte. Ci-dessous est mon travail actuel:Essayez d'écrire char [] dans un fichier texte

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

Cela ne fonctionne toujours pas.

ici est l'erreur:

erreur C2440: 'type cast': ne peut pas convertir '' à 'char *'

mise à jour:

jusqu'à présent, voici ma tentative de progrès, le code peut compiler, mais en cours d'exécution, mon programme s'est soudainement arrêté.

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; 

Répondre

4

Plusieurs choses mauvaises ou "pas bon" dans votre code:

  1. Vous ne vérifiez jamais si le open échoue. Vous utilisez les fonctions write de clunky.
  2. Vous ne vérifiez pas si votre écriture est réussie (pas tout à fait nécessaire si vous êtes sûr que cela fonctionnera).

Cela vous donnera plus d'informations si quelque chose échoue:

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

Je pense que l'ouverture du fichier a échoué parce que vous disposez pas des autorisations appropriées. Le programme ci-dessus vous dira où échoue.

MISE À JOUR: Pour répondre à votre deuxième question: vous faites ceci:

CBar* a; 

Ce qui crée un pointeur, mais laisse unitiallized. Vous souhaitez ensuite le déréférencer pour accéder à son membre de données , ce qui entraîne évidemment un blocage. Vous devez initialiser votre pointeur (ou ne pas utiliser un pointeur ici, je ne vois aucune raison de):

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

S'il vous plaît lire tout bon tutoriel sur C++. Ce sont des erreurs que vous faites lorsque vous n'avez pas dormi pendant trois jours ou si vous ne comprenez pas les concepts de base de la langue.

+2

Qu'est-ce avec "fonctions d'écriture maladroit"? – anno

+0

Eh bien, il y a le besoin de la distribution '(char *)', et la spécification superflue de la longueur (c'est un tableau C++, la longueur est fixe). – rubenvb

+0

L'échec des opérations de flux ne doit pas entraîner l'arrêt du programme (à moins que vous n'ayez explicitement appelé 'ios :: exceptions()' pour demander que certaines erreurs soient signalées comme des exceptions). Je suppose qu'un mauvais accès à la mémoire est impliqué quelque part. –

5

Vous devez passer fstream, en open(), le genre d'opération que vous vous attendez à faire: entrée, sortie, ou même les deux. Vous devriez essayer avec:

ofs.open("c:\\myURL.txt", ios::out | ios::text); 

Quoi qu'il en soit, il serait préférable d'utiliser ofstream à la place fstream générique:

ofstream ofs; 
ofs.open("c:\\myURL.txt", ios::text); 
ofs.write((char*)testDest, 256);  
ofs.close(); 
0

Vous oubliez que si quelqu'un tente de vérifier si le fichier existe, si elle ne crée pas le fichier que vous devez utiliser fstream pour votre objet est donc de ne pas avoir 2 différents objets pour ouvrir et écrire

Questions connexes