将'const char *'传递给类型为 'char *' 的参数会丢弃限定符
Passing 'const char *' to parameter of type 'char *' discards qualifiers
我会得到警告:
miniunz.c:342:25:将'const char *'传递给类型'char *'的参数 丢弃预选赛
在zip存档库的Miniunz.c文件中。具体:
const char* write_filename;
fopen(write_filename,"wb"); //// This work fine...........
makedir(write_filename); //// This line shows warning....
应该如何删除此警告以使两者都可以正常工作?
,如zip代码中的 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
指针接下来,您需要将const char
施放为char
,调用
makedir((char*)write_filename);
在上面的行中,您正在使用const char
的write_filename
值并将其施放为char *
,然后将其传递到makedir
函数中,该功能以char *
为参数:
makedir(char * argName)
希望这有点清晰。
传递给 makedir
的参数是类型char*
而不是类型const char*
。
您得到的警告是警告您,使用const
预选赛(在这种情况下为write
)传递一个值,而没有该值从该值中删除const
预选赛。避免此警告的一种方法是从write_filename
手动删除const
预选赛,如下:
char* write_filename;
fopen(write_filename,"wb");
makedir(write_filename);
但是,我不建议这样做,因为您可能需要保留write_filename
const
。如果要在保留write_filename
const
时避免此警告,则可以手动将其施加到普通char*
,如下:
const char* write_filename;
fopen(write_filename,"wb");
makedir((char*) write_filename);
相关文章:
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 从 C# GUI 将 char * 参数传递给C++ dll 函数
- Swift Call C 方法带有char **参数,并且需要操作char **参数
- 使用"const char*"和"char*"参数连接两个第三方模块
- 将 char * 参数传递给 C# 函数
- 使用 char[] 参数通过 JNI 调用方法
- C# PInvoke - 返回 char* 和引用 char* 参数的函数
- 导出托管的C#函数将返回更改CHAR*参数为未托管的代码
- 即使在 Visual C++ 编译器中,在模板中传递 "const char" 参数也有些麻烦 2013 年 11 月 CTP
- 将'const char*'参数发送到接收'const char* &'的函数
- discover char*参数大小
- lambda接受“char”参数
- 在编译模板方面,char、有符号char或无符号char参数类型的函数重载
- 将类方法传递给const char*参数
- Atoi 仅返回 char* 参数的第一个数字
- 专门化模板成员函数来处理std::string和char[]参数
- 带有 char* 参数的 cout <<打印字符串,而不是指针值
- 带有char[]参数的c++模板
- GetModuleBaseName dosen't take char* 参数
- 以双精度数除以双精度数来获得循环中的余数和char参数不起作用