[C]Récupérer un char* de taille variable.
Résolu/Fermé
Nieli
Messages postés
83
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
23 avril 2009
-
4 déc. 2008 à 17:46
Nieli Messages postés 83 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 23 avril 2009 - 4 déc. 2008 à 19:07
Nieli Messages postés 83 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 23 avril 2009 - 4 déc. 2008 à 19:07
A voir également:
- [C]Récupérer un char* de taille variable.
- Comment réduire la taille d'un fichier - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Recuperer video youtube - Guide
- Comment récupérer un compte facebook piraté - Guide
- Impossible de récupérer mon compte gmail - Guide
6 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
4 déc. 2008 à 18:01
4 déc. 2008 à 18:01
Salut,
Tu utilises un pointeur non alloué. Qui plus est, lorsque tu utilises sizeof sur un pointeur, ça ne retournera pas la taille du nombre de char sur lequel il pointe, mais ça te retournera la taille d'un char* (souvent 4). De plus, il vaut mieux tester le retour de getcwd car elle peut retourner NULL si le tableau n'est pas assez grand.
Voici un exemple d'implémentation :
Cdlt
Tu utilises un pointeur non alloué. Qui plus est, lorsque tu utilises sizeof sur un pointeur, ça ne retournera pas la taille du nombre de char sur lequel il pointe, mais ça te retournera la taille d'un char* (souvent 4). De plus, il vaut mieux tester le retour de getcwd car elle peut retourner NULL si le tableau n'est pas assez grand.
Voici un exemple d'implémentation :
int main(void){ char p[50]; if(getcwd(p,sizeof p)==NULL) exit(-1); puts(p); return 0; }
Cdlt
Nieli
Messages postés
83
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
23 avril 2009
6
4 déc. 2008 à 18:07
4 déc. 2008 à 18:07
Je sais bien :/
Mais ce que tu fais c'est ré-écrire mon problème.
Si getcwd renvoie une char* de taille 51 -> erreur de segmentation, c'est ca mon problème
Tu es sur que getcwd renverra NULL si la taille est plus grande? :/
Mais ce que tu fais c'est ré-écrire mon problème.
Si getcwd renvoie une char* de taille 51 -> erreur de segmentation, c'est ca mon problème
Tu es sur que getcwd renverra NULL si la taille est plus grande? :/
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
4 déc. 2008 à 18:13
4 déc. 2008 à 18:13
T'as pas dû bien lire ce que j'ai dit ^^.
De plus, il vaut mieux tester le retour de getcwd car elle peut retourner NULL si le tableau n'est pas assez grand.
Donc, pas d'erreur de segfault, puisque tu spécifies la taille en paramètres. Au pire, getcwd te renverra NULL.
Cdlt
De plus, il vaut mieux tester le retour de getcwd car elle peut retourner NULL si le tableau n'est pas assez grand.
Donc, pas d'erreur de segfault, puisque tu spécifies la taille en paramètres. Au pire, getcwd te renverra NULL.
Cdlt
Nieli
Messages postés
83
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
23 avril 2009
6
4 déc. 2008 à 18:19
4 déc. 2008 à 18:19
Oui, j'ai édité mon message par la suite, donc pas moyen de faire varier la taille du "receptable" en fonction de ce que renvoie getcwd ?
Quelque chose du genre
int taille= 50;
char rep[50];
while (getcwd(rep,sizeof(rep)==NULL)
{
taille++;
char rep[taille]; //oui la ca compile pas mais un truc du genre?
}
Quelque chose du genre
int taille= 50;
char rep[50];
while (getcwd(rep,sizeof(rep)==NULL)
{
taille++;
char rep[taille]; //oui la ca compile pas mais un truc du genre?
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
4 déc. 2008 à 18:35
4 déc. 2008 à 18:35
Dans ce cas, fais plutôt :
Si tu as des questions, sur le code, n'hésite pas.
Cdlt
#include <unistd.h> #include <stdio.h> #include <errno.h> #include <stdlib.h> int main(void){ size_t len=2; char *p=malloc(len); if(p==NULL) exit(-1); while(getcwd(p,len)==NULL && errno==ERANGE) if(realloc(p,++len)==NULL) exit(-1); puts(p); free(p);p=NULL; return 0; }
Si tu as des questions, sur le code, n'hésite pas.
Cdlt
Nieli
Messages postés
83
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
23 avril 2009
6
4 déc. 2008 à 19:07
4 déc. 2008 à 19:07
Parfait, je pensais bien que c'était une hsitoire de malloc/calloc/free.
Merci beaucoup ^^.
Merci beaucoup ^^.