probleme fonction readdir: ça ne marche pas

bezin

Habitué
voila,

on essai d'accéder aux sous dossiers et fichier d'un dossier avec ce petit programme test mais lors de l'éxécution on nous dit qu'il y a violation d'adresse...

si vous pouvez bien nous aider ....

#include <dirent.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>

void main()
{ DIR *p;
struct dirent *ent;

p=opendir("C:\test");
while ((ent = readdir(p)) != NULL)
{ printf("%s\n",ent->d_name);}
getch();

}

merci d'avance
 

batchy

Grand Maître
ce programme ne peut tout simplement pas marcher.
pour t'en convaincre : regarde ce que t'affiche ce code :
Code:
puts("C:\test");
et compare avec :
Code:
puts("C:\\test");

de manière générale, tu aurai pu t'en rendre compte si tu vérifiait qu'il n'y a pas eu d'erreur à chaque étape. opendir() renvoie NULL en cas d'erreur, et un perror("erreur") affiche l'erreur ...
 

bezin

Habitué
euh, honnêtement je ne savais pa qu'il y avait une différence...

et ça marche très bien :)

merci beaucoup.

mais sinon avec C:\TEST , ça marche aussi à condition d'avoir une copie dans le BIN...

ce qui est absurde je sais ... :)
 

zeb

Modérateur
Mais non ça ne marche pas avec C:\TEST. C'est un effet de bord.
 

braindeadbzh

Grand Maître
Le problème avec ton [cpp]puts("C:\test" );[/cpp] c'est que le '\' en C (mais dans pas mal de langage) est un caractère d'échappement, il faut donc le doublé '\\' pour obtenir '\' dans une chaîne C. L'effet de bord ici c'est que ton '\' est suivi d'un 't', '\t' étant le caractère qui correspond à une tabulation, du coup ta chaîne n'est pas "c:\test" mais plutôt "c: test".
 

bezin

Habitué
ah oui c'est vrai
on double pour annuler l'effet de la première...
j'avais complétement oublié ce truc :)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 122
Messages
6 717 719
Membres
1 586 356
Dernier membre
TommyStam
Partager cette page
Haut