我正在制作一个C程序,我需要从中获取程序启动的目录。该程序是为UNIX计算机编写的。我一直在关注opendir()
和telldir()
,但telldir()
会返回off_t (long int)
,所以它对我没有帮助。
如何获取字符串中的当前路径(char数组)?
答案 0 :(得分:267)
你看过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;
}
答案 1 :(得分:60)
查找getcwd
的手册页。
答案 2 :(得分:17)
虽然问题标记为Unix,但当目标平台为Windows时,人们也会访问它,Windows的答案是GetCurrentDirectory()
函数:
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
这些答案适用于C和C ++代码。
user4581301在comment中向另一个问题建议的链接,并通过Google搜索网站验证为当前的首选:microsoft.com getcurrentdirectory'。 < / p>
答案 3 :(得分:2)
#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;
}
答案 4 :(得分:1)
请注意,getcwd(3)
也可以在Microsoft的libc getcwd(3)中找到,其工作方式与您期望的相同。
必须与-loldnames
(oldnames.lib链接,在大多数情况下自动完成)或使用_getcwd()
。在Windows RT下,无前缀版本不可用。
答案 5 :(得分:0)
要获取当前目录(执行目标程序的位置),可以使用以下示例代码,该示例代码对Visual Studio和C / C ++的Linux / MacOS(gcc / clang)均适用:
#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;
}
答案 6 :(得分: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);
}