Voir la version complète : Pointeurs sur tableaux
Salut, j'ai un problème avec un pointeur sur tableaux.
char message[] = "Test";
char *m_pszMessage;
for(m_pszMessage = message; *m_pszMessage; m_pszMessage++)
{
ofstream log("log.txt");
log << *m_pszMessage;
}
Le problème est que le log m'écrit dans le txt, le dernier caractère du message et pas les message entier. Est- ce que vous saurez pourquoi ?
Merci.
Si tu ouvres ton fichier à chaque fois que tu veux écrire un caractère, tu vas effacer systèmatiquement le contenu précédent. Utilise le flag std::ios_base::app (comme append) à l'ouverture, ou bien mieux encore ouvre ton fichier une fois pour toute avant ta boucle.
Et puis les char* c'est mal, essaye de jeter un oeil du côté de std::string.
Flamaros
26/07/2005, 16h37
et j'ajouterais meme qu'il est mal d'ecrire caracteres par caracteres (trop d'appels systeme).
utilise write, fwrite, fprintf, ... enfin bref, mais pas caracteres apres caracteres je t'en prie.
Et comme dis Aznam idem pour l'ouverture d'un fichier, conserve sont fd, handle pendant toute la duree de son utilisation.
Je te conseille attention a ses petites choses si tu ne veux pas ralentir ton prog pour rien.
Fait aussi attention avec les pointeurs car si tu parcoures comme ca une chaine dynamiquement (malloc) allouee, le free ne va pas aimer.
Bah des char* non alloué, c'est source à 90% de seg fault
Je m'y connai enormement dans ce domaine :D
J'ai suivi le conseil de Loulou et je me suis renseigner sur le header string.h .
Et j'ai trouver une fonction qui m'a lair bien mais maintenant j'ai un problème avec.
char *m_pszMessage = new char;
strcpy(m_pszMessage, "Test");
ofstream log("log.txt", ios::app);
log << m_pszMessage << endl;
Ceci me semble bizare puisque mon programme ne peut pas démarrer lorsque
strcpy(m_pszMessage, "Aucun problème détecté...");
En effet, le programme crée une erreur et le débugger indique une mauvaise allocation de mémoire. Donc est ce que quelqu'un aurait une réponse à ce problème ?
Euh.. je ne suis pas codeur C++ mais :
char *m_pszMessage = new char; // Allocation d'un seul (?) octet
Est-ce bien raisonnable ?
string.h est un en-tête C, Loulou voulait parler de la classe string de la STL il me semble.
Héhé, merci. Je vais revoir mes bases moi, j'ai encore des lacunes.
string.h est un en-tête C, Loulou voulait parler de la classe string de la STL il me semble
Oui :)
Héhé, merci. Je vais revoir mes bases moi, j'ai encore des lacunes.
Bonne idée. Essaye de jeter un oeil du côté des conteneurs standards, des strings, des flux, et ce genre de choses bien C++, et également du côté de la gestion de la mémoire et des allocations dynamiques.
Voila, j'ai résolu mon problème. Merci.
vBulletin® v.3.6.5, Copyright ©2000-2009, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org