char * et Allocation de memoire
Bonjour,
il y a un truc que j aimerais qu on m expliquer sur l allocation de memoire
genre ce code
Code:
1 2 3 4 5 6 7 8 9 10 11
|
char haystack[] = "This code works.";
char *haystack2 = "This code dont works.";
char * token;
token = strtok(haystack, " ");
printf("%s\n",haystack);
printf("%s\n",haystack2);
token = strtok(haystack2, " "); |
Si je declare haystack avec un char[] aucun probleme avec strtok (ou strcpy c juste un exemple)
Par contre avec un char* ca marche pas , que fait le compilateur alors puisque je peux quand meme afficher correctement la chaine ?
Code:
1 2 3
|
char *haystack2 = "This code dont works.";
printf("%s\n",haystack2); |
Je sais qu en faisant :
Code:
1 2 3 4 5 6 7
|
char string[] = "This code works";
char *haystack = NULL;
char * token = NULL;
haystack = (char*) malloc (sizeof(string));
strcpy(haystack,string);
token = strtok(haystack, " "); |
Je resoud mon probleme mais j aimerais comprendre ce qui se passe exactement au niveau du code quand je fais un
Code:
char *chaine ="quelque chose"
qui fait que les fonctions comme strtok plante
Merci
Re: char * et Allocation de memoire
Citation:
Envoyé par venomelektro
Par contre avec un char* ca marche pas , que fait le compilateur alors puisque je peux quand meme afficher correctement la chaine ?
Dans le cas du char *, tu crée un pointeur vers une chaine stockée dans une zone généralement en lecture seule (zone de données initialisées, ça dépend des OS), avec [] tu déclare un tableau dont la taille est celle de la chaine, et ce tableau est initialisé avec ta chaine (c'est comme un malloc + strcpy). Ta chaine n'est pas contenue dans la zone de données initialisée, mais du code est généré pour la créer dans ton tableau.
D'ailleurs, c'est const char * = qu'il faut utiliser dans ce cas, ce qui évite les problèmes.