【问题标题】:char pointer comparison error字符指针比较错误
【发布时间】:2014-06-27 20:46:29
【问题描述】:

使用 C++ MFC 和 Visual Studio 2008。

对于新手问题,我很抱歉,但我不确定为什么这不起作用。我正在创建一个函数,用于在传递给它的 char * 中查找 XML 的标准非法字符,但出现一个奇怪的错误。

char* XMLIllegalCharacterParser(char *input){
    char *Temp;
    for (size_t i = 0; i < strlen(input); i++){
        if(input[i] == "\"" || input[i] == "\'" || input[i] == "&")
    }
    return Temp;
}

1>.\FileImport.cpp(868) : error C2446: '==' : no conversion from 'const char *' to 'int'

我终其一生都无法弄清楚为什么它不起作用。我有什么语法错误?

PS:我知道我那里只有 3 个角色。我收到了这个错误,我想在添加其他两个之前修复它。

这是我的代码:

char* XMLIllegalCharacterParser(char *input){
char *Temp;
for (size_t i = 0; i < strlen(input); i++){
    switch(input[i]){
        case '\"':
            strcat_s(Temp, 6, "&quot;");
            break;
        case '\'':
            strcat_s(Temp, 6, "&apos;");
            break;
        case '&':
            strcat_s(Temp, 5, "&amp;");
            break;
        case '<':
            strcat_s(Temp, 4, "&lt;");
            break;
        case '>':
            strcat_s(Temp, 4, "&gt;");
            break;
        default:
            strcat_s(Temp, 1, (const char*)input[i]);
            break;
    }
}
return Temp;
}

【问题讨论】:

  • 不修改时不要使用非常量 char *。这只是限制了人们如何调用你的函数(这是,imo,非常令人沮丧)。无论如何,您的 if 语句没有正文,因为这是 C++,请使用 std::string
  • 另外,在进行单字符比较时,使用单引号',如input[i] == '&amp;'
  • 是的,我还没有包括正文。既然我已经解决了错误,我很快就会有一个合适的身体。
  • 也许这会有所帮助:*.com/questions/20303100/…

标签: c++ string pointers char


【解决方案1】:

你的意思可能是单引号而不是双引号:

input[i] == '"'
            ^ ^

其他情况也是如此。当您使用双引号时,例如在“&”中,您创建了一个“字符串文字”。但是input[i] 是一个字符:您不能将字符串文字与字符进行比较。

更重要的是,即使input[i] 也是字符串文字,这也不是在 C++ 中比较 c 风格字符串的正确方法。

【讨论】:

  • 这是一个正确的答案。如果它还包括 why.,那将是一个很好的答案
  • 谢谢!这一下子解决了。该功能是初稿,很快就会扩展,但这解决了我的主要问题。
  • 我认为== 是在 C++ 中比较字符串的权利。你只需要为你的字符串使用正确的类型,而不是让自己的生活变得更艰难。
  • @chris 我明确表示我的意思是 c 风格的字符串。
  • @chris: 奇怪的是 C++ 人不记得他们的字符串类的名称空间,而是坚持用继承和常用的名称来装饰。不过,不知何故,恕我直言。
【解决方案2】:

您正在将 char 与字符串进行比较。更改此行:

if (input[i] == '"' || input[i] == '\'' || input[i] == '&')

【讨论】: