我正在尝试在Windows下编译一个Linux程序(我使用mingw)
void make_directory(const char* name) {
mkdir(name1, name2);
}
这里出现了一个错误:
Too Many Arguments to function 'int mkdir(const char*)'
有什么方法可以解决这个问题吗?
mkdir()
只需要一个参数。但是由于此函数已被弃用,您应该使用_mkdir()
代替:int _mkdir(const char *dirname);
int _wmkdir(const wchar_t *dirname); /* for wide-character */
void make_directory(const char* name)
{
#ifdef __linux__
mkdir(name, 777); /* Or what parameter you need here ... */
#else
_mkdir(name);
#endif
}
编辑:
MinGW 实现:
_mkdir():
_CRTIMP int __cdecl __MINGW_NOTHROW _mkdir (const char*);
mkdir():
_CRTIMP int __cdecl __MINGW_NOTHROW mkdir (const char*);
这两个都在 io.h
中指定,但我想最好包含 direct.h
(它包含了 io.h
的一部分)。
mkdir()
是POSIX标准函数。它被微软弃用了;我不确定微软对此事的看法应该被认真对待到什么程度。 - Keith Thompsonmkdir()
函数实际上需要 两个 参数;有关详细信息请参阅我的答案。 - Keith Thompsonmkdir()
。微软和POSIX有一些同名但不兼容的函数确实很令人遗憾,但两者的历史可以追溯到早期的UNIX和MS-DOS,因此也并不意外。因此,微软正在弃用其自己的 mkdir()
函数,考虑到名称冲突,这可能是件好事。(至于选择 _mkdir()
作为新名称的观点,我会保留我的看法。) - Keith Thompson_CRTIMP
)。 - ollo在 mingw-w64 下构建 Linux 已有程序时,我成功地做到了这一点:
#if (defined(_WIN32) || defined(__WIN32__))
#define mkdir(A, B) mkdir(A)
#endif
#include <direct.h> /* _mkdir */
并使用_mkdir而不是mkdir。 - thorocname1
和name2
都是您想要创建的目录名称(但请参见下文)。
mkdir()
创建一个(或尝试创建一个)单个目录。如果您想要创建两个目录,则需要调用mkdir()
两次。mkdir()
函数实际上需要两个参数--但第二个参数不是名称。在我的系统上引用手册页面上的话:#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
_mkdir()
函数是专门针对Microsoft Windows的,它只需要一个参数;在Windows上,权限(即模式)的工作方式与POSIX(Unix、Linux等)系统不同。但是,你的编译器显然认为mkdir()
只需要一个参数,这让人想知道它为什么会这样认为。你使用了哪个头文件来获取mkdir
函数的声明?如上所述,POSIX的mkdir()
需要两个参数,但第二个参数是mode_t
,而不是名称。你说这段代码最初是为Linux编写的。这些参数真的叫做name1
和name2
吗?还是你试图通过更改名称来简化代码?你能否更新问题,向我们展示实际复制和粘贴的代码?
mkdir
函数只接受一个参数,但是您正在传递两个参数或者传递了不兼容的数据类型。 - JackC
标签。如果这里的 mkdir() 是某个 API 的一部分,需要提供库/API名称和您的环境,例如 Linux/POSIX 等。 - Jack