我有一个非常简单的 const char 数组示例和一个应该将它们打印出来的函数(遍历所选的一个)。与我所有的期望相反,它正在迭代所有这些,而不仅仅是作为参数传递的那个。

#include <iostream>

const char* oranges[] = {
    "ORANGE",
    "RED ORANGE"
};

const char* apples[] = {
    "APPLE"
};

const char* lemons[] = {
    "LEMON"
};

void printFruit(const char** fruit){
    int i =0;
    while (fruit[i] != '\0'){
        std::cout << "---------------------\n";
        std::cout << fruit[i] << "\n";
        i++;
    }
}

int main (int argc, const char * argv[])
{
   printFruit(oranges);
   return 0;
}

我期望的结果是,函数 printFruit 与作为参数给出的橙子将打印 ORANGE 和 RED ORANGE,同时我打印了所有定义的水果(来自其他数组),如下所示:
---------------------
ORANGE
---------------------
RED ORANGE
---------------------
APPLE
---------------------
LEMON

抱歉我的无知,但为什么会发生这种情况?

编辑:我关注了这个问题:defining and iterating through array of strings in c 与我的相似。

最佳答案

您正在检查 fruit[i] != '\0' 。这是错误的,因为 fruit[i]char * ,而不是字符。此外,您的 vector 不会终止。您可能想检查是 fruit[i] != 0 还是 *fruit[i] != '\0' 。在第一种情况下,您需要像这样终止 vector :

const char* oranges[] = {
    "ORANGE",
    "RED ORANGE",
    0  // or NULL
};

在第二:
const char* oranges[] = {
    "ORANGE",
    "RED ORANGE",
    ""
};

关于c++ - 遍历 const char* 数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12856845/

10-13 06:44