将'const char *'传递给类型为 'char *' 的参数会丢弃限定符

Passing 'const char *' to parameter of type 'char *' discards qualifiers

本文关键字:char 参数 const 类型      更新时间:2023-10-16

我会得到警告:

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 charwrite_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);