函数'int mkdir(const char *)'的参数太多

时间:2012-08-24 01:27:49

标签: c mingw

我正在尝试在windows下编译一个linux编写的程序(我使用mingw)

void make_directory(const char* name) {
  mkdir(name1, name2);
}

有一个错误:

Too Many Arguments to function 'int mkdir(const char*)'

有什么想法解决这个问题吗?

3 个答案:

答案 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)

我假设name1name2都是您要创建的目录的名称(但请参见下文)。

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编写的。参数是否真的称为name1name2,或者您是否尝试通过更改名称来简化代码?您能否更新问题以向我们展示实际的复制粘贴代码?