Pointeur de string en C
nico
-
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je suis bloqué sur un programme en C
j'ai fait char** ptr;
ptr[0]="float";
if(ptr1[0]=="float") {
...
}
et là j'ai une erreur de segmentation
impossible de résoudre un problème qui parait si facile
je suis bloqué sur un programme en C
j'ai fait char** ptr;
ptr[0]="float";
if(ptr1[0]=="float") {
...
}
et là j'ai une erreur de segmentation
impossible de résoudre un problème qui parait si facile
6 réponses
-
Salut,
Il faut lui allouer de la place à ton pointeur:char **ptr; int i; ptr = malloc( sizeof(char *) * NB_POINTEURS_QUE_TU_VEUX); ptr[0] = "prout"; if(strcmp(prt[0], "prout") == 0){ //tout va bien }
Et utilise strcmp au lieu de ==, parce que le == sur des char * ne fera que comparer l'adresse et non pas le contenu des chaines.-
-
Nan, plantera pô ;-)
ptr[0] est de type char * et la place du pointeur en lui même est bien allouée. Par contre le pointeur ne pointe sur rien puisque j'ai pas refait de malloc derrière.
Donc pour l'instant c'est l'équivalent d'unchar *tmp;
Et je peux le faire pointer sur ce que je veux:tmp = "prout"
...sachant que prout est une chaine allouée dans une zone de la mémoire en lecture seule à l'initialisation de l'application. Sa place en elle même est déjà allouée et "prout" retourne une adresse vers cette chaîne de caractère (de type const char *).
Voilà donc c'est la même chose pour ptr[0].
Par contre ce que je ne peux pas faire ça:char *tmp; strcpy(tmp, "prout");
Car tmp ne pointe sur rien, donc il ne pourra pas recopier "prout", donc crak!
Et donc même chose pour ptr[0].
Pour faire un strcpy effectivement il faudrait faire comme tu as fait: en allouant chaque pointeur de ptr. -
-
-
ouais il faut voir,c'est sur que cela m'interesse mais il faut serieusement que je me plonge la dedans de plus près car là je n'ai fait que survolé et en plus sur windows xp, bon sur linux je préfère (je sais pas je me sens mieux quoi), je ne sais pas si tu peux m'envoyer des mail à partir du forum mais sinon c'est mon pseudo suivi de @ et du domaine fraçais de hotmail. voila (bouh pour la methode pour donner mon mail mais bon tu as compris)
-
-
normale tu n'as pas alloué de memoire :
ce que tu cherche à faire c'est un tableau de string :
char** ptr;
ptr = (char **)malloc(sizeof(char *)*LE_NOMBRE_DE_STRING_QUE_TU_VEUX_DANS_TON_TABLEAU);
ptr[0]=(char*)malloc(strlen("float")*sizeof(char) + 1);
strcpy(ptr[0],"float");
//et voila le tour est joué
if(strcmp(ptr[0],"float") == 0) { //pour la comparaison de 2 chaines utilise strcmp -> renvoie -1 si plus petit, 0 si idem
//1 si plus grand
...
}
//quand tu fais un malloc il faut faire un free alors tu fais à la fin de ton programme :
for(i=0;i<LE_NOMBRE_DE_STRING_QUE_TU_VEUX_DANS_TON_TABLEAU;i++){
free(ptr[i]);
}
free(ptr);
//attention ne le fais que si toute tes case de ton tableau ont "recu" un malloc sinon "segfault"
et voila j'espere t'avoir aider
tchû -
oauis je sais, pour moi une string c'est un char *... '-)
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
et oui java masque toutes ces allocations et grace à son garbage collector plus de free. ahhhhh JAVA ... enfin c'est un peu lourd comme langage ...
allé bon courage pour la suite -
Salut,
par exemple#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char** ptr; char s[]="float"; ptr=(char **) malloc(2*sizeof (char *)); ptr[0]="float"; ptr[1]=s; if(strcmp(ptr[1],"float")==0) printf("%s\n",ptr[0]); return 0; }--
106485010510997108