rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 19 oct. 2006 à 23:10
Euh s'il vous plait
char *nom;
nom="name";
est tout a fait correct, en effet "name" est un pointeur de type * sur une adresse memoire , luthor .. que dire. .. tourne 7 fois tes doigts dans ta bouches??
Louis
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 19 oct. 2006 à 23:21
re-bonsoir,
ca n'est pas que ça compile et quand plus (par chance) ça marche, que c'est correct...
char *nom; // pointeur de type char sur une adresse memoire, ok. Mais ou ? personne ne le sait.
nom = "name"; // ici, on met 'name' quelque part, ca marche, ca marche pas, on verra à l'execution.
bien sur c'est juste, pourquoi on se fait ch... avec les mallocs, hein ?
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 19 oct. 2006 à 23:26
Ralala ...
"name" est ici une constante de type char* .. et elle peut rentrer dans un char * tu crois que le compilo te rajoute un strcpy? nan nan .. il est pas assez gentil ..
juste test ceci :
char nom[10];
nom = "name";
la le compilo a un probleme..
( je remarque que luthor avait raison en fait.. ( excuse moi ^^) , il y a en effet des tas de gens qui ne connaissent pas tous seulement ils sont persuadés d'avoir raison ... )
Louis
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 19 oct. 2006 à 23:35
C'est pas seulement en testant qu'on apprend. On apprend des conneries,
oui ... Les vrais infos fiables viennent de la documentation, pas des
petits essais perso. C'est pas parce que ton code compile qu'il est
correct, loin de la...
char * test;
test = "chaine"; <= c'est totalement délirant.
alors que ca:
char * test = "chaine"; <= c'est correct bien que c'est très confu
comme écriture, mais bon le compilo l'accepte et c'est parfois pratique.
C'est équivalent à : char test[7] = "chaine"; <= la au moins, on
demande 7 octet en mémoire et "test" pointe sur le premier octet.
(char*) c'est quoi pour toi ? Pour moi c'est 4 misérables octet qui contiennt l'adresse d'un truc.
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 20 oct. 2006 à 18:01
luthor ce serait appreciable que tu sois un peu moins entêté ..
char * test;
test = "chaine";
n'est pas délirant; ...
pour te le prouver :
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *adr;
adr = "une chaine";
printf("%d\n",adr);
adr = "une autre chaine";
printf("%d\n",adr);
return 0;
}
affiche un nombre different a chaque printf ..
car on pointe vers une chaine differente stockée dans la memoire..
( un peu comme le serait db 'ma chaine$' en asm . )
et dans ce programme :
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *adr = "lol";
char bis[] = "lol";
adr[0] = 'p';
bis[0] = 'p';
return 0;
}
adr[0] est inaccesible en lecture (car type pointeur de chaine ) tandis que bis[0] oui .. (car tableau de taille strlen(bis) .. )
Ce ne sont pas des tests je sais vraiment ce que je raconte .. ( si apres tu t'obstine .. on ne peut plus rien pour toi.. )
louis