1) Strangely enough, you set the size of the array, you use decimal numbers in your life, probably? In general, WinAPI defines a special character MAX_PATH which defines the maximum size of a file path. Better to use it.
2) You specify a buffer for the ASCII string, but use it with the UNICODE version of the function. Will correctly write:
char szPath[MAX_PATH]; ::GetCurrentDirectoryA(MAX_PATH, szPath);
However, this code is not quite suitable if there are national symbols on the way. Therefore, it is better to use the UNICODE string:
WCHAR szPath[MAX_PATH]; ::GetCurrentDirectoryW(MAX_PATH, szPath);
3) And like a cherry on a cake - the GetCurrentDirectory function does not return the path to the executable file. It returns the current directory, and this is something else. It really often coincides with the directory running .exe, but not always. Actually, GetCurrentDirectory is a relic of MS-DOS, in a multitasking system with a graphical interface, the concept of "current directory" makes little sense. It's better to forget about this function at all, it is not needed.
To get the path to your .exe, you need to use the GetModuleFileName function. For example:
WCHAR szPath[MAX_PATH]; ::GetModuleFileNameW(NULL, szPath, MAX_PATH);
This is a bit simplistic (it would be better to check for an error), but it will work. To get the directory you need to find the first '\' from the end and drop the file name. For example:
*wcsrchr(szPath, L'\\') = L'\0';