cs_DJeS
Messages postés18Date d'inscriptionmardi 19 février 2002StatutMembreDernière intervention 3 juin 2004
-
26 mai 2004 à 23:03
cs_DJeS
Messages postés18Date d'inscriptionmardi 19 février 2002StatutMembreDernière intervention 3 juin 2004
-
28 mai 2004 à 22:58
J'ai d'eternels problemes pour manipuler les variables char, const char etc...
quand je veux faire passer un argument char a un fonction j'ai souvent des erreurs du genre impossible de convertir en const char...je defini en const char ma variable mais erreur "impossible de convetir const char en const char".
qqun a t'il une bonne adresse ou un bon tut' a me conseiller?
dois-je utiliser les pointeurs ou qqchose comme ca pour manipuler correctement ce type de données...?
je vous serai reconnaissant d'un ptit coup de pouce car ces erreurs me rendent la vie impossible.....argh!
DJeS
A voir également:
Operand types are incompatible ("char" and "const char *")
cs_DJeS
Messages postés18Date d'inscriptionmardi 19 février 2002StatutMembreDernière intervention 3 juin 2004 26 mai 2004 à 23:17
oui et bien voila un exemple. je suis sous dec++ 4.9.8.0
je veux pouvoir me connecter avec une socket a une adresse determiner par un utilisateur avec les fct cout et cin de iostream.
sur la ligne :
sin.sin_addr.s_addr = inet_addr(adresse); //adresse étant la variable censée contenir l'adresse
si je la definie en char, ca ne marche evidemment pas puisque il faut un type const char. si je la defini en tant que const char, il me met "uninitialized const 'adress' ", sans doute logiquement puisque ma constante n'en est pas vraiment une....
en bref, j'ai un probleme entre le type de variable utilisée pour la saisie de donnée en entrée clavier en console,
et son utilisation avec des fonctions qui recquiert un certain type de variable...cela doit etre idiot mais j'avoue que ca me bloque...
PS: dites moi si vous n'avez pas compris ma nouvelle explication ;-)
DJeS
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 26 mai 2004 à 23:29
char *adresse = "127.0.0.1";
ou encore
char adresse[32];
strcpy(adresse, "127.0.0.1");
La deuxieme forme est préférable si tu compte modifier la variable
PS : la transormation en const char* se fait automatiquement si tu lui passe un char*, tu ne doit pas avoir d'erreur de compil. Tu ne lui passait pas des char tt court par hasard (1 seul caractère) ?
cs_DJeS
Messages postés18Date d'inscriptionmardi 19 février 2002StatutMembreDernière intervention 3 juin 2004 28 mai 2004 à 11:23
Merci beaucoup ca marche comme sur des roulettes apres qq experimentations...
non anacr0x ce n'est pas que je n'envoyait qu'un char tout court comme tu dis mais que effectivement, je ne lui passait pas un pointeur et une variable...merci bcp pr vos reponses...j'ai notamment appris que char variable[30] etait conesidéré comme un pointeur char *variable. sauf que dans le premier cas, on "monopolise" 30 octets tandis que dans le dernier c'est" dynamique" et le programme adapte l'espace memoire reservé a la variable...c ca? cependant je ne comprend pas tres bien comment fonctionne l'allocation dynamique pr que tout ne se marche pas dessus (debordement de tampon)...
merci
cs_DJeS
Messages postés18Date d'inscriptionmardi 19 février 2002StatutMembreDernière intervention 3 juin 2004 28 mai 2004 à 11:42
"Rien n'est implicite dans la gestion de la memoire."
sonne comme un adage que je vais retenir...d'accord ok mer ci beaucoup...
je l'alloue...dans la fonction (fct dans ce cas)?
mais finalement
char truc[40]
est en fait un raccourci de
char *truc;
truc = (char *)malloc(40); ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 28 mai 2004 à 11:52
'quasi' idem mais char truc[40] n'a pas a etre desalloue car il n'y a pas d'allocation, juste une reserve sur la pile par abaissement du registre ESP, le compilo mettra tout seul le code pour replacer correctement.
Par contre tout malloc doit etr suivi a un moment ou un autre du free pour liberer la memoire.
Faut lire un bon bouquin de C, indispensable.