我正在尝试在windows下编译一个linux编写的程序(我使用mingw)
void make_directory(const char* name) {
mkdir(name1, name2);
}
有一个错误:
Too Many Arguments to function 'int mkdir(const char*)'
有什么想法解决这个问题吗?
答案 0 :(得分:6)
正如评论中所述,mkdir()
只接受一个参数。但是,由于此功能为deprecated,您应use _mkdir()
代替:
int _mkdir(const char *dirname);
int _wmkdir(const wchar_t *dirname); /* for wide-character */
如果你想在两个系统上使用你的功能(linux / mingw):
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
)。
答案 1 :(得分:6)
我设法逃脱了这个,因为在mingw-w64下构建了一个Linux程序:
#if (defined(_WIN32) || defined(__WIN32__))
#define mkdir(A, B) mkdir(A)
#endif
答案 2 :(得分:3)
我假设name1
和name2
都是您要创建的目录的名称(但请参见下文)。
mkdir()
创建(或尝试创建)单个目录。如果要创建两个目录,则需要两次调用mkdir()
。
只是为了增加混淆,POSIX mkdir()
函数实际上需要两个参数 - 但第二个参数不是名称。在我的系统上引用手册页:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
ollo的答案中提到的_mkdir()
函数特定于Microsoft Windows,它只需要一个参数;模式(即权限)在Windows上的工作方式与在POSIX(Unix,Linux等)系统上的工作方式不同。
但是你的编译器显然认为mkdir()
只接受一个参数,这让人想知道它为什么这么认为。您#include
获取mkdir
函数声明的标题是什么?
正如我上面提到的,POSIX mkdir()
有两个参数,但第二个是mode_t
,而不是名字。你说代码最初是为Linux编写的。参数是否真的称为name1
和name2
,或者您是否尝试通过更改名称来简化代码?您能否更新问题以向我们展示实际的复制粘贴代码?