196

我正在制作一个 C 程序,我需要在其中获取程序启动的目录。该程序是为 UNIX 计算机编写的。我一直在看opendir()and telldir(),但telldir()返回 a off_t (long int),所以它真的对我没有帮助。

如何获取字符串(字符数组)中的当前路径?

4

7 回答 7

349

你看过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;
}
于 2008-11-18T11:38:24.747 回答
60

查找手册页getcwd

于 2008-11-18T11:37:30.257 回答
30

虽然这个问题被标记为 Unix,但当他们的目标平台是 Windows 时,人们也可以访问它,而 Windows 的答案是GetCurrentDirectory()函数:

DWORD WINAPI GetCurrentDirectory(
  _In_  DWORD  nBufferLength,
  _Out_ LPTSTR lpBuffer
);

这些答案适用于 C 和 C++ 代码。

user4581301在对另一个问题的评论中建议的链接,并通过 Google 搜索“site:microsoft.com getcurrentdirectory”验证为当前首选。

于 2015-07-18T02:39:43.273 回答
3
#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;
}
于 2017-12-18T22:39:39.670 回答
1

请注意, Microsoft 的 libc: getcwd(3)getcwd(3)也提供了它,并且工作方式与您期望的相同。

必须与-loldnames(oldnames.lib,在大多数情况下自动完成)链接,或使用_getcwd(). 无前缀版本在 Windows RT 下不可用。

于 2017-10-23T19:01:58.460 回答
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;
}
于 2020-02-04T13:25:43.187 回答
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);
}
于 2020-12-22T19:05:06.533 回答