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

问题描述 投票:1回答:1

出于某些奇怪的原因,当我尝试将函数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*, ...);

Google似乎真的不喜欢谈论C,因为我可以找到如何在几乎任何现有语言上获得workdir,除了C.唯一弹出的是一些描述3个函数的文档:getcwd,getwd和get_current_dir_name。我真的想使用get_current_dir_name,因为它的清洁度。

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

c windows gcc mingw ld
1个回答
6
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.