Answers:
你看了getcwd()
吗?
#include <unistd.h>
char *getcwd(char *buf, size_t size);
简单的例子:
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
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;
}
int main()
应该是int main(void)
。
char cwd[PATH_MAX+1]
。或者,如果您不能仅char *buf=getcwd(NULL,0);
在完成时就被缓冲区打扰free(buf)
(自POSIX.1-2001起)
查找手册页getcwd
。
man 3 getcwd
。除了开玩笑,别太过古板,这篇文章来自08年,所以惯例不一样。
尽管该问题标记为Unix,但当目标平台是Windows时,人们也会访问它,而Windows的答案是该GetCurrentDirectory()
函数:
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
这些答案适用于C和C ++代码。
用户4581301在评论中建议的链接指向另一个问题,并已通过Google搜索“ site:microsoft.com getcurrentdirectory”验证为当前的首选。
#include <stdio.h> /* defines FILENAME_MAX */
//#define WINDOWS /* uncomment this line to use it for windows.*/
#ifdef WINDOWS
#include <direct.h>
#define GetCurrentDir _getcwd
#else
#include <unistd.h>
#define GetCurrentDir getcwd
#endif
int main(){
char buff[FILENAME_MAX];
GetCurrentDir( buff, FILENAME_MAX );
printf("Current working dir: %s\n", buff);
return 1;
}
要获取当前目录(执行目标程序的位置),可以使用以下示例代码,该示例代码对Visual Studio和Linux / MacOS(gcc / clang)(适用于C和C ++)均适用:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(_MSC_VER)
#include <direct.h>
#define getcwd _getcwd
#elif defined(__GNUC__)
#include <unistd.h>
#endif
int main() {
char* buffer;
if( (buffer=getcwd(NULL, 0)) == NULL) {
perror("failed to get current directory\n");
} else {
printf("%s \nLength: %zu\n", buffer, strlen(buffer));
free(buffer);
}
return 0;
}