类型“ unsigned char *”的参数与类型“ const char *”的参数不兼容

时间:2019-02-26 07:04:46

标签: c++ visual-studio codeblocks decoder

我正在将Decoder用于Microsoft脚本编码器。当我在Codeblocks中运行它时,它工作得很好。但是当我在Visual Studio中运行它时,它显示了以下错误
代码段1:

char decodeMnemonic(unsigned char *mnemonic)
{
    int i = 0;
    while (entities[i].entity != NULL)
    {
        **if (strcmp(entities[i].entity, mnemonic) == 0)**
       **//Error 1: cannot convert argument 2 from 'unsigned char *'
       // to 'const char *'**   
        return entities[i].mappedchar;
        i++;
    }
    printf("Warning: did not recognize HTML entity '%s'\n", mnemonic);
    return '?';
}

我必须将Decoder集成到程序中,所以我没有在命令行中传递文件名作为命令行参数,而是在代码中给了它们自己的文件路径。

代码段2:

    int main()
    {
        unsigned char *inname = "C:\\Users\\Karthi\\Desktop\\Project Winter 2018-19\\poweliks_sample\\poweliks_encoded_js.bin";
        unsigned char *outname = "C:\\Users\\Karthi\\Desktop\\Project Winter 2018-19\\poweliks_sample\\decoded1.txt";
        unsigned int cp = 0;
   //**Error 2: 'initializing': cannot convert from 'const char [87]' to 'unsigned char *'**    

2 个答案:

答案 0 :(得分:0)

您可以使用reinterpret_cast(对于unsigned char*const char*)。但是,如果您从const unsigned char*变为非const类型,则必须首先使用const_cast,因为reinterpret_cast无法丢弃const

下面的段落简要概述了为什么您的代码不起作用。

根据C99 Standard(类似于其他C标准),字符串文字具有静态存储持续时间,其类型为char[],该标准表示:

  

如果程序尝试修改此类数组,则行为未定义。

使用argv时程序运行的原因是,argv不被视为字符串文字数组。这意味着您可以对其进行修改。

答案 1 :(得分:0)

以下是您解决问题的方法:

代码段1: strcmp是比较两个C字符串的一种方法。它需要const char *类型。

  

int strcmp(const char * str1,const char * str2);   您有两种选择来解决它:

  1. 像这样声明您的方法

    char decodeMnemonic(const char *mnemonic)
    
  2. 使用C ++ Strings并像这样声明您的方法

    char decodeMnemonic(std::string mnemonic)
    

如果使用第二种解决方案,则必须调用c_str()-Method才能在strcmp中使用它

if (strcmp(entities[i].entity, mnemonic.c_str()) == 0)

或者您仅使用C ++-String:请在此处阅读如何使用它:http://www.cplusplus.com/reference/string/string/compare/

代码段2:您不能像这样使用它,因为您有字符串常量,它们是数组常量字符。 请使用C ++字符串。您使用C ++,因此请使用他的功能(https://www.geeksforgeeks.org/stdstring-class-in-c/

无论如何,如果您想像C一样使用它:https://www.programiz.com/c-programming/c-strings

char c[] = "abcd";
char c[50] = "abcd";

或使用const(C ++)

char *str1 = "string Literal";
const char *str2 = "string Literal";