[C]Récupérer un char* de taille variable.
Résolu
Nieli
Messages postés
83
Date d'inscription
Statut
Membre
Dernière intervention
-
Nieli Messages postés 83 Date d'inscription Statut Membre Dernière intervention -
Nieli Messages postés 83 Date d'inscription Statut Membre Dernière intervention -
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
- Comment récupérer un compte facebook piraté - Guide
- Impossible de récupérer mon compte gmail - Guide
- Récupérer un numéro de téléphone effacé - Accueil - Android
6 réponses
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
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? :/
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
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
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