CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C]probleme opendir

lvscarf
lvscarf
Niveau 6
27 novembre 2013 à 18:16:15

Salut tout le monde! j'ai un petit problème, je dois réaliser un programme permettant d'afficher des répertoires et les sous répertoires..
Je fais un premier opendir dans le main (ça marche) j’envoie le lien (char) ainsi que le nom du répertoire (d_name) dans une fonction que j'ai créé, sauf que, l'opendir dans ma fonction ne marche pas, je vous fourni un petit bout de code :

void display_rep(const char * rac_rep, const char *dir_rep){
char ch[30];
printf("%s", ch);
strcat(ch, rac_rep);
strcat(ch, "\\");
strcat(ch, dir_rep);
printf("%s\n", ch);

DIR *rep = NULL;
rep = opendir(ch);
printf("%s", rep);

if (rep == NULL){
printf("Dossier introuvable");
exit(1);
}

le résultat affiché est bon (lien du répertoire depuis C :) mais rep reste égal a NULL... quelqu'un pourrait m'aider? me dire si je suis sur la mauvaise voie?
Je vous remercie d'avance pour vos réponses, je reviendrai dans le cas ou j'aurai trouvé une réponse entre temps

godrik
godrik
Niveau 30
28 novembre 2013 à 04:21:42

Lis "man opendir" a la section "return value"

lvscarf
lvscarf
Niveau 6
29 novembre 2013 à 09:54:55

Je te remercie de ta réponse, j'ai trouvé une "solution" intermédiaire entre temps mais la il me reste un problème... étrange, le premier caractère de ma chaine est un symbole, voici le code dans la fonction :
int car_one = 0;
int car_two = 0;
int car_three = 0;
int i;

car_one = caracteres_count(rac_rep);
car_two = caracteres_count(dir_rep);
car_three = car_one + car_two;
printf("%d", car_three); // dans mon cas, m'affiche 17
char *ch = (char*)malloc(car_three * sizeof(char)+1);
printf("\n\n%c\n\n", ch[0]); // m'affiche une espèce de L miniature

j'avais pensé a affecter le nombre d'élément avec une variable (exemple char ch[car_three]; ) mais j'ai vus que c'était pas vraiment autorisé... peut être que j'ai raté quelque chose dans mon malloc? Et même dans ce cas, le problème ne devrait pas se poser pour le premier caractère?

lokilok
lokilok
Niveau 16
29 novembre 2013 à 14:22:11

Dans ton code ch vaut rien du tout, je veux dire tu assigne aucune valeur donc normal qu'il affiche quelque chose au hasard.

lvscarf
lvscarf
Niveau 6
29 novembre 2013 à 14:56:53

Pour moi ça devrait ne rien afficher, ça devrait être NULL...

strcat(ch, rac_rep);

strcat(ch, "\\");
strcat(ch, dir_rep);
printf("\n\n%s\n\n", ch);

je fais ma concaténation ici, sauf que ce premier caractère non souhaité reste =/ au lieu d'avoir C:\users\test j'aurais ᶫC:\users\test on ma dis que c'était parceque j'étais dans la mémoire... enfin la j'ai un peu de mal a comprendre pourquoi ça ne marche pas

lvscarf
lvscarf
Niveau 6
29 novembre 2013 à 17:14:02

C'est bon, j'ai réussi a corriger le problème, ça venais de la taille du tableau, j'ai donc faire ch[numb+1] et ça roule

godrik
godrik
Niveau 30
29 novembre 2013 à 18:34:09

Ce que je voulais dire dans mon message c'est que opendir fonctionne correctement. Il te dit qu'il ne peut pas faire ce que tu veux en retournant NULL, mais il met a jour la variable errno qui te dit "pourquoi" il n'a pas reussi a le faire. De facon general, des que tu as une erreur, essaye d'obtenir toutes les informations relatives a cette erreur.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment