'How to get current directory using C language on Windows?
Can anyone tell me how to get the path of the current working directory on Windows?
Solution 1:[1]
The Windows API function GetCurrentDirectory will give you the current directory for the current process.
Alternatively, you may want to use the function getcwd or _getcwd, especially if you seek compatibility with POSIX platforms such as Linux.
Here is an example for using the function GetCurrentDirectory:
#include <windows.h>
int main( void )
{
    TCHAR tszBuffer[MAX_PATH];
    DWORD dwRet;
    dwRet = GetCurrentDirectory( MAX_PATH, tszBuffer );
    if ( dwRet == 0 )
    {
        //TODO: handle error
    }
    // The buffer now contains the path of the
    // current directory and can be inspected.
}
MAX_PATH is defined when you #include <windows.h>.
TCHAR is just a typedef for char if you are compiling in ASCII mode, or for a wide-character WCHAR if you are compiling in UNICODE mode. DWORD is just a typedef for an unsigned long. These typedefs are declared when you #include <windows.h>.
Here is an example for using the function getcwd:
#include <stdio.h>
#include <direct.h>
// Microsoft wants us to use _getcwd instead of getcwd, which breaks POSIX
// compatibility. See the following link for more information:
// https://stackoverflow.com/questions/7582394/strdup-or-strdup
// Therefore we must disable the compiler warning if we want to use getcwd
// to maintain POSIX compatibility. This is accomplished with the following
// line.
#pragma warning(disable : 4996)
// We can't use the constant MAX_PATH in this program because it is not
// defined. This is because we have not included windows.h. Since MAX_PATH
// has the value 260, we will use that value.
#define BUF_SIZE 260
int main()
{
    char buffer[BUF_SIZE];
    char *p;
    p = getcwd( buffer, BUF_SIZE );
    if ( p == NULL )
    {
        //TODO: handle error
    }
    printf( "The current directory is: %s", buffer );
}
In contrast to the function GetCurrentDirectory, the functions getcwd and _getcwd allow you to pass NULL as the buffer parameter. In that case, it will allocate the memory for you with malloc and return a pointer to that memory buffer. Therefore, you must call free when you are finished with the buffer, to prevent a memory leak. Here is an example:
#include <stdio.h>
#include <stdlib.h>
#include <direct.h>
// Microsoft wants us to use _getcwd instead of getcwd, which breaks POSIX
// compatibility. See the following link for more information:
// https://stackoverflow.com/questions/7582394/strdup-or-strdup
// Therefore we must disable the compiler warning if we want to use getcwd
// to maintain POSIX compatibility. This is accomplished with the following
// line.
#pragma warning(disable : 4996)
int main()
{
    char *p;
    p = getcwd( NULL, 0 );
    if ( p == NULL )
    {
        //TODO: handle error
    }
    printf( "The current directory is: %s", p );
    free( p );
}
    					Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | 
