Aller au contenu

Aide Débutant C++ chaines de caractères[résolu]


Messages recommandés

Salut à tous !

ça fait vraiment un bail que j'avais pas posté sur INpact.

Bon... bref...

Je suis en IUT info en 1ère année, et le C++ est donc au programme.

Seulement j'ai un soucis avec les chaines ("non non pitié arrêtez de me jeter des pierres oui oui j'ai honte aïe aïe aïe !")

Mon soucis :

je créé une Classe toute banale dans un .h

#ifnedef KOALA_H//j'avais dit classe banale oui :D
#define KOALA_H
class Koala{
private:
char * sonNom;
int sonAge;
static int nbr_de_koalas;

public:
Koala(char* unNom="Jojo",int unAge=18)//Jojo est le nom par défaut et 18 l'age par défaut
{
sonAge=unAge;//jusque là tout va bien
sonNom=malloc(strlen(unNom)*sizeof(char));
strcpy(sonNom,unNom);
}
~Koala()
{
delete(sonNom);
}


};

#endif

Comme erreur j'ai droit à un magnifique :

error C2440: '=' : cannot convert from 'void *' to 'char *'

Conversion from 'void*' to pointer to non-'void' requires an explicit cast

Voilà... toute les librairies sont incluses, je pense que ça doit être une bêtises toute bête de débutant (ou alors j'ai peut-être rien compris et c'est du gros n'importe quoi), mais merci de me filer un p'tit coup de main :chinois:

Lien vers le commentaire
Partager sur d’autres sites

Je ne suis pas une bête en C++, je n'en ai même jamais fait.

Koala(int unNom="Jojo"
C'est normal que tu passe une chaîne de caractères à un int ?
sonNom=malloc(strlen(unNom)*sizeof(char));

J'aurais mis sonNom = (char *) malloc (strlen (unNom) * sizeof (char));

En effet :

MALLOC(3) Linux Programmer's Manual MALLOC(3)

NAME

calloc, malloc, free, realloc - Allocate and free dynamic memory

SYNOPSIS

#include <stdlib.h>

void *malloc(size_t size);

Ce qui colle bien à ton erreur (void * pour du char *)

strcpy(sonNom,unNom);
strcpy à prohiber.

Plutôt utiliser strncpy, strlcpy si ce dernier est dispo (systèmes bsd) ou directement memcpy.

Lien vers le commentaire
Partager sur d’autres sites

Oui bon, pour le

Koala(int unNom="Jojo"

c'était une faute de frappe

pour le (char*) avant le malloc, tu avais raison c'est bien ça (merki :) )

Maintenant... pourquoi faut-il prohiber strcpy() ?

Et dans quelles librairies je trouve strncpy() ou strlcpy() (ou encore memcpy()) ?

sinon pour mon destructeur ? c'est bon ?

Lien vers le commentaire
Partager sur d’autres sites

Pas besoin de mettre les parenthèse pour le destructeur.

Si tu es en C++ utilise les std::string ca te facilitera la vie.

Pour utiliser strncpy tu dois simplement faire un #include <string>, ca permet d'éviter des buffer overflow en spécifiant le nombre maximal de caractère que tu peux copier dans la chaine.

Lien vers le commentaire
Partager sur d’autres sites

Ok Ok !

Donc si j'ai bien compris, strncpy, strlcpy et memcpy (dans la librairie string lui aussi ?) fonctionnent comme strcpy avec quelques désavantage en moins ? (je sais que strcpy s'arrête dès qu'il trouve un espace... (le crétin!))

bon... hé bien je crois qu'il ne me reste plus qu'à appliquer tout ça :)

Merci bien les INpactiens !

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...