我有一个非常简单的 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/