Se connecter avec
S'enregistrer | Connectez-vous

[C]affichage repertoire courant

Dernière réponse : dans Programmation

bonjour,

je cherche à afficher le repertoire courant dans le quel je suis

j'ai établi le code suivant mais pour ne pas changer j'ai une nouvelle fois une erreur ... seulement je ne la trouve pas non plus ...

j'ai bien défini une variable globale pour pouvoir récupérer le repertoire et l'afficher... j'alloue celle-ci dans la fonction repCourant puis à la fin je la libère

dans le main je fais appel à la fonction avant d'afficher repertoire ... mais rien j'ai une erreur

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4.  
  5. #define C 256
  6.  
  7. char *repertoire;
  8.  
  9.  
  10. char repCourant()
  11. {
  12. repertoire = (char *)malloc (C * sizeof(char));
  13. char *adresse;
  14. char rep[C];
  15. *adresse = getcwd (rep,C-1);
  16. if (adresse)
  17. {
  18. repertoire = &rep[0];
  19. free(repertoire);
  20. }
  21. }
  22.  
  23. int main ()
  24. {
  25. repCourant();
  26. printf("%s\n",&repertoire[0]);
  27. }


si quelqu'un peut m'aider à corriger ma version .... ou au pire m'en donner une autre si vous ne savez pas comment corriger la mienne ;) 

merci d'avance

OS : linux

Autres pages sur : affichage repertoire courant

Lassé par la pub ? Créez un compte

kotu a dit :
j'ai établi le code suivant mais pour ne pas changer j'ai une nouvelle fois une erreur ... seulement je ne la trouve pas non plus ...
si quelqu'un peut m'aider à corriger ma version .... ou au pire m'en donner une autre si vous ne savez pas comment corriger la mienne ;) 

Ton code commenté (mais non corrigé)

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

/* -ed-
#include <malloc.h>

non standard et inutile.

*/

#define C 256

/* -ed- pourquoi une globale ? */
char *repertoire;

/* -ed- pourquoi un retour de type char, de plus, non utilise ! */
char repCourant()
{

repertoire = (char *)malloc (C * sizeof(char));
/* -ed-
pourquoi un cast ?
sizeof (char) vaut 1 par definition.
pourquoi allouer une taille fixe. Qui dit qu'elle est suffisante ?
*/

char *adresse;
char rep[C];
*adresse = getcwd (rep,C-1);
/* -ed-

pourquoi '*adresse' ?
quel est le type retourne par getcwd() ?

*/

if (adresse)
{
repertoire = &rep[0];
/* -ed-
quel est le type de repertoire ?
quel est le type de &rep[0] ?
pourquoi ecrire du code incoherent ?
pourquoi ne pas lire les warnings ?
*/

free(repertoire);
/* -ed-
vu que repertoire a ete modifie depuis le malloc(),
il y a peu de chance pour que ce code ait un sens.

*/
}
}

int main ()
{
repCourant();
printf("%s\n",&repertoire[0]);
/* -ed-
acceder a un bloc libe're' invoque un comportement indefini.
*/

/* -ed- compatibilite C90 */
return 0;
}

je pensais recevoir des notifications du sujet mais apparement non :( 

pour répondre à Emmanuel Delahaye :

beaucoup d'erreur que je vois que maintenant avec tes commentaires, je vais tâcher de corriger ça

merci à tous les deux :) 
Lassé par la pub ? Créez un compte