Chaine dans une fonction en C

Résolu
twiiiix Messages postés 325 Date d'inscription   Statut Membre Dernière intervention   -  
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   -
Salut à tous
je programme en C depuis peut et je voudrais savoir comment renvoyer un chaine de caractère dans une fonction Fopen. Pour l'instant j'ai ça:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
const char* userprofile=getenv("userprofile");
if (userprofile) {
printf(userprofile);
}
return 0;
}

est mon but étant de créer mon fichier sur le bureau j'obtiens donc le chemin du fichier utilisateur dans la chaine"userprofile"
pourais-je faire quelque chose comme ça ?

FILE* fichier = NULL;
fichier = fopen("userprofile\\desktop\\test.txt", "r+");

comment remplacer userprofile par sa valeur ?

Merci d'avance.
A voir également:

5 réponses

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Il suffit de contruire une chaîne de caractères par concaténation du contenu de 'userprofile' et de "\\desk..."". Pour cela utiliser les fonctions 'strcpy' et 'strcat' sans oublier d'allouer l'espace nécessaire pour recevoir le résultat. Ne surtout pas utiliser la variable 'userprofile' pour effectuer la concaténation.

Nota: il faut tester 'userprofile après l'appel à 'getenv' car si la chaîne "userprofile" n'est pas trouvée... je crains la catastrophe (en fait je ne crains rien, mais je suis sûr de la catastrophe!).

Bonne continuation.
0
twiiiix Messages postés 325 Date d'inscription   Statut Membre Dernière intervention   57
 
merci de ta réponse, mais comme je l'ai dis je débute, alors si tu pouvais me dire comment faire une concaténation.
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Quelque chose du genre:
char* temp = "\\desktop\\test.txt";
char* chn = malloc (sizeof(userprofile) + sizeof(temp) + 1);
strcpy (chn, userprofile);
strcat (chn, temp);
FILE* fichier = fopen (chn, "r+");
Sans oublier de tester 'fichier'.
Bonne réflexion.
0
twiiiix Messages postés 325 Date d'inscription   Statut Membre Dernière intervention   57
 
j'ai fait ça :
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{

const char* userprofile=getenv("userprofile");
printf(userprofile);
char* temp = "\\desktop\\test.txt";
char* chn = malloc (sizeof(userprofile) + sizeof(temp) + 1);
strcpy (chn, userprofile);
strcat (chn, temp);

FILE* fichier = NULL;
fichier =fopen (chn, "w");


return 0;
}
mais a l'exécution j'usqu'au printf ça marche puisque l'adresse de mon dossier utilisateur s'affiche puis après j'ai une erreur :
"Process terminated with status -1073741819 (0 minutes, 6 seconds)"
0
le père
 
Bonjour

loupius est distrait ce soir :)
strlen, pas sizeof ...
char* chn = malloc (strlen(userprofile) + strlen(temp) + 1); 

sizeof donne la taille du pointeur, ce qui n'a rien à faire ici. C'est strlen qui donne le nombre de caractères
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
L'habitude de mettre des 'sizeof' dans les 'malloc'...
L'avantage du forum est de pouvoir, sans masochisme, se faire corriger !
Merci à toi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
twiiiix Messages postés 325 Date d'inscription   Statut Membre Dernière intervention   57
 
Merci beaucoup tout marche impec.
0