PDA

Voir la version complète : Pointeurs sur tableaux


Aznam
26/07/2005, 13h31
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.

Loulou
26/07/2005, 14h10
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.

bougie
26/07/2005, 17h30
Bah des char* non alloué, c'est source à 90% de seg fault
Je m'y connai enormement dans ce domaine :D

Aznam
26/07/2005, 20h54
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 ?

Acetate
26/07/2005, 21h06
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.

Aznam
26/07/2005, 21h13
Héhé, merci. Je vais revoir mes bases moi, j'ai encore des lacunes.

Loulou
27/07/2005, 07h57
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.

Aznam
27/07/2005, 17h43
Voila, j'ai résolu mon problème. Merci.