C++ 通过';常量字符*';至类型为'的参数;字符*';丢弃限定符

C++ 通过';常量字符*';至类型为'的参数;字符*';丢弃限定符,c++,objective-c,c,gcc-warning,C++,Objective C,C,Gcc Warning,我得到警告: miniunz.c:342:25:将“const char*”传递给“char*”类型的参数 丢弃限定符 在的miniunz.c文件中。具体而言: const char* write_filename; fopen(write_filename,"wb"); //// This work fine........... makedir(write_filename); //// This line shows warning.... 如何删除此警告以使两者正常工作?如中的m

我得到警告:

miniunz.c:342:25:将“const char*”传递给“char*”类型的参数 丢弃限定符

在的miniunz.c文件中。具体而言:

const char* write_filename;
fopen(write_filename,"wb"); //// This work fine...........
makedir(write_filename);    //// This line shows warning....

如何删除此警告以使两者正常工作?

如中的
miniunz.c
文件所示

函数定义如下:

int makedir (newdir)
    char *newdir; 
所以考虑到, 有两种方法可以做到这一点

  char* write_filename;

              fopen((char*)write_filename,"wb");
                 makedir(write_filename);

  const char* write_filename;

              fopen(write_filename,"wb");
                 makedir((char*)write_filename);
或者检查
makedir()
函数


希望这将对您有所帮助。

原始答案的改进:

您有一个函数,它将
NSString*
作为参数

首先,需要使用
const char*str=[string UTF8String]将其转换为
const char
指针

接下来,您需要将
常量字符
转换为
字符
,调用

makedir((char*)写入文件名)

在上面的一行中,您将使用
write\u filename
const char
值,并将其转换为
char*
并将其传递到
makedir
函数,该函数以
char*
为参数:

makedir(char*argName)


希望这更清楚一点。

请尝试此
makedir((char*)write\u文件名)。希望这能对您有所帮助。看起来像是
makedir
定义中的一个bug:我看不出为什么它不能接受
const char*
参数,所以您应该更改它,这样就不需要为
fopen
强制转换了。另外,我真的建议不要将
const
char*
中强制转换。如果
makedir
修改字符串,并传递放置在只读内存中的文本字符串,则将获得未定义的行为。它不是可移植代码。正确的方法是为需要字符串的函数创建字符串的非常量副本。