首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >函数'int mkdir(const char*)‘的参数太多

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

Stack Overflow用户
提问于 2012-08-24 09:27:49
回答 3查看 9.8K关注 0票数 8

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

代码语言:javascript
复制
void make_directory(const char* name) {
  mkdir(name1, name2);
}

有一个错误:

代码语言:javascript
复制
Too Many Arguments to function 'int mkdir(const char*)'

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

EN

回答 3

Stack Overflow用户

发布于 2016-05-30 16:17:29

对于在mingw-w64下构建的Linux编写的程序,我设法做到了这一点:

代码语言:javascript
复制
#if (defined(_WIN32) || defined(__WIN32__))
#define mkdir(A, B) mkdir(A)
#endif
票数 7
EN

Stack Overflow用户

发布于 2013-01-08 00:14:22

正如评论中所说,mkdir()只接受one参数。但是,由于此函数为deprecated,因此您应该改为use _mkdir()

代码语言:javascript
复制
int _mkdir(const char *dirname); 
int _wmkdir(const wchar_t *dirname); /* for wide-character */

如果您希望在两个系统(linux /mingw)上都使用您的函数:

代码语言:javascript
复制
void make_directory(const char* name)
{
#ifdef __linux__
    mkdir(name, 777); /* Or what parameter you need here ... */
#else
    _mkdir(name);
#endif
}

编辑:

MinGW实现:

_mkdir():

代码语言:javascript
复制
_CRTIMP int __cdecl __MINGW_NOTHROW _mkdir (const char*);

mkdir():

代码语言:javascript
复制
_CRTIMP int __cdecl __MINGW_NOTHROW mkdir (const char*);

两者都是在io.h中指定的,但我想更好的做法是包含direct.h (在其部分中包含io.h )。

票数 6
EN

Stack Overflow用户

发布于 2013-01-08 00:40:57

我将假设name1name2都是您想要创建的目录的名称(但请参见下面的内容)。

mkdir()创建(或尝试创建)单个目录。如果您想创建两个目录,则需要调用mkdir()两次。

更令人困惑的是,POSIX mkdir()函数实际上有两个参数--但第二个参数不是名称。引用我系统上的手册页:

代码语言:javascript
复制
#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,而不是一个名称。参数是否真的称为name1name2,或者您是否试图通过更改名称来简化代码?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12102147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档