【问题标题】:comparing a char in a dynamic array with a char将动态数组中的 char 与 char 进行比较
【发布时间】:2019-11-08 17:09:38
【问题描述】:

我想打印一个在实际结束前有 \0 个字符的动态 char 数组。 我正在为每个索引使用cout 打印它。

for (int i = 0; i < size; i++) {

        std::cout << content[i];
}

但是当我遇到 \0 字符时,我想检测它,所以我正在使用:

if (content[i] == 0) {
     std::cout "zero";
}

我试过了

if (content[i] == "\0") {
     std::cout "zero";
}

但我无法进行这种比较,因为您显然无法比较 const char*char

我做错了什么?如何进行这种比较?

char 数组顺便说一句:

char * content = new char[size];
file.seekg(0);
file.read(content, size);

【问题讨论】:

  • content[i] == 0 比较 charint。具体是什么给了你所说的错误?
  • 请在此处按要求发布minimal reproducible example! (Edit你的问题)
  • content[i] == 0 是正确的,所以无论您遇到什么问题,都不是这样。您的代码还有其他一些问题,而您尝试修复错误的事情(常见的新手情况)只会让事情变得更糟。发布一个完整的程序来说明您的问题而不仅仅是 sn-pts 会有所帮助。
  • 也许this question 有帮助?

标签: c++ arrays dynamic types casting


【解决方案1】:

if (content[i] == "\0")

"\0" 是一个字符串文字,在这种情况下是 const char [2]。这 decays 指向一个指针,导致将 const char *char 进行比较并且编译器错误。

你想要的

if (content[i] == '\0')

获取一个空字符。也就是说,整数可以与char 进行比较,所以if (content[i] == 0) 是有效的,但(我认为)不如明确地创建一个空字符那么清楚。

延伸阅读:Single quotes vs. double quotes in C or C++chris提供了链接)

【讨论】:

    【解决方案2】:

    在你的 if 语句中尝试"0",因为那样你会比较相同的类型

    【讨论】:

    • \0 与“0”不同。
    • 原始char* 指针并没有像这样进行比较。 OP 需要使用 strcmp() 来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多