我正在制作一个 C 程序,我需要在其中获取程序启动的目录。该程序是为 UNIX 计算机编写的。我一直在看opendir()
and telldir()
,但telldir()
返回 a off_t (long int)
,所以它真的对我没有帮助。
如何获取字符串(字符数组)中的当前路径?
我正在制作一个 C 程序,我需要在其中获取程序启动的目录。该程序是为 UNIX 计算机编写的。我一直在看opendir()
and telldir()
,但telldir()
返回 a off_t (long int)
,所以它真的对我没有帮助。
如何获取字符串(字符数组)中的当前路径?
你看过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;
}
查找手册页getcwd
。
虽然这个问题被标记为 Unix,但当他们的目标平台是 Windows 时,人们也可以访问它,而 Windows 的答案是GetCurrentDirectory()
函数:
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
这些答案适用于 C 和 C++ 代码。
user4581301在对另一个问题的评论中建议的链接,并通过 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;
}
请注意, Microsoft 的 libc: getcwd(3)getcwd(3)
也提供了它,并且工作方式与您期望的相同。
必须与-loldnames
(oldnames.lib,在大多数情况下自动完成)链接,或使用_getcwd()
. 无前缀版本在 Windows RT 下不可用。
要获取当前目录(执行目标程序的位置),您可以使用以下示例代码,该代码适用于 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;
}
使用 getcwd
#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;
}
或者
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
main() {
char *buf;
buf=(char *)malloc(100*sizeof(char));
getcwd(buf,100);
printf("\n %s \n",buf);
}