我正在尝试在windows下编译一个linux写的程序(我使用mingw)。
void make_directory(const char* name) {
mkdir(name1, name2);
}
有一个错误:
Too Many Arguments to function 'int mkdir(const char*)'
有什么办法解决这个问题吗?
发布于 2016-05-30 16:17:29
对于在mingw-w64下构建的Linux编写的程序,我设法做到了这一点:
#if (defined(_WIN32) || defined(__WIN32__))
#define mkdir(A, B) mkdir(A)
#endif
发布于 2013-01-08 00:14:22
正如评论中所说,mkdir()
只接受one参数。但是,由于此函数为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
)。
发布于 2013-01-08 00:40:57
我将假设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()
只接受一个参数,这让人疑惑为什么它会这样认为。为了获得mkdir
函数的声明,你使用了什么头#include
?
如上所述,POSIX有两个参数,但第二个参数是一个mode_t
,而不是一个名称。参数是否真的称为name1
和name2
,或者您是否试图通过更改名称来简化代码?
https://stackoverflow.com/questions/12102147
复制相似问题