在Windows上的C中获取当前工作目录

时间:2014-12-21 01:22:25

标签: c windows gcc mingw ld

出于某些奇怪的原因,当我尝试使用函数get_current_dir_name和MinGW GCC编译器时, 我在链接上得到了这个结果:

undefined reference to `get_current_dir_name'
collect2.exe: error: ld returned 1 exit status

但是,只有在使用像这样的函数

时才能得到这个
printf("%i", get_current_dir_name());

或者

printf("%s", get_current_dir_name());

当我尝试

printf(get_current_dir_name());

我得到了这个,这没有任何意义,因为该函数返回一个char *,根据文档:

tester.c: In function 'main':
tester.c:16:2: warning: passing argument 1 of 'printf' makes pointer from integer without a cast [enabled by default]
  printf(get_current_dir_name());
  ^
In file included from tester.c:1:0:
c:\mingw\include\stdio.h:294:37: note: expected 'const char *' but argument is of type 'int'
 _CRTIMP int __cdecl __MINGW_NOTHROW printf (const char*, ...);
谷歌似乎真的不喜欢谈论C,因为我可以找到如何在几乎任何现有语言上获得workdir,除了C.唯一突然出现的是一些描述3个函数的文档:getcwd,getwd和get_current_dir_name。我真的想使用get_current_dir_name,因为它的清洁。

我该如何处理?这是minGW的错误吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:6)

您显然未能包含任何包含get_current_dir_name()声明的标头。因此,编译器将假定返回值int,这不是printf()的有效第一个参数(您应该增加警告级别,这样您将得到错误而不仅仅是警告)。

此外,链接失败,因此您也不会链接到实现该函数的库,这是预期的:get_current_dir_name()是GNU扩展,不是C标准库的一部分。

在Windows上,您需要使用在windows.h中声明的Windows API提供的等效功能,即GetCurrentDirectory()