Come ottenere la directory corrente in un programma C?

Sto facendo un programma C in cui ho bisogno di ottenere la directory da cui il programma è avviato. Questo programma è scritto per computer UNIX. Ho guardato opendir() e telldir() , ma telldir() restituisce un off_t (long int) , quindi in realtà non mi aiuta.

Come posso ottenere il percorso corrente in una stringa (array di caratteri)?

Hai dato un’occhiata a getcwd() ?

 #include  char *getcwd(char *buf, size_t size); 

Semplice esempio:

 #include  #include  #include  int main() { char cwd[PATH_MAX]; if (getcwd(cwd, sizeof(cwd)) != NULL) { printf("Current working dir: %s\n", cwd); } else { perror("getcwd() error"); return 1; } return 0; } 

Cerca la pagina man di getcwd .

Sebbene la domanda sia codificata in Unix, le persone possono anche visitarla quando la loro piattaforma di destinazione è Windows e la risposta per Windows è la funzione GetCurrentDirectory() :

 DWORD WINAPI GetCurrentDirectory( _In_ DWORD nBufferLength, _Out_ LPTSTR lpBuffer ); 

Queste risposte si applicano sia al codice C che al codice C ++.

Link suggerito dall’utente4581301 in un commento ad un’altra domanda e verificato come la migliore scelta attuale con un sito di ricerca Google: microsoft.com getcurrentdirectory ‘.

 #include  /* defines FILENAME_MAX */ //#define WINDOWS /* uncomment this line to use it for windows.*/ #ifdef WINDOWS #include  #define GetCurrentDir _getcwd #else #include  #define GetCurrentDir getcwd #endif int main(){ char buff[FILENAME_MAX]; GetCurrentDir( buff, FILENAME_MAX ); printf("Current working dir: %s\n", buff); return 1; } 

Nota che getcwd(3) è disponibile anche in libc di Microsoft: getcwd (3) , e funziona allo stesso modo che ti aspetti.

È necessario collegarsi con -loldnames (oldnames.lib, che viene eseguito automaticamente nella maggior parte dei casi) o utilizzare _getcwd() . La versione non prefissa non è disponibile in Windows RT.