错误[错误]无法转换' char **'到#char;'在任务中

时间:2016-06-30 09:44:47

标签: c++

#include <iostream>

using namespace std;

const int MAX = 4;

int main ()
{

    char *names[MAX] = {
        "Zara Ali",
        "Hina Ali",
        "Nuha Ali",
        "Sara Ali",
    };

    char *ptr[MAX];

    for (int i = 0; i < MAX; i++)
    {
         ptr[i] = &names[i];
    }

    for (int i = 0; i < MAX; i++)
    {
        cout << "Value of names[" << i << "] = ";
        cout << *ptr[i] << endl;
    }

    return 0;
}

2 个答案:

答案 0 :(得分:4)

您需要更改:

ptr[i] = &names[i]; // `&names[i];`is pointer to char*

ptr[i] = names[i];

另一件事是你应该将文字存储为const char*而不是char*,所以也要改变:

char *ptr[MAX];
char *names[MAX] = {

为:

const char *ptr[MAX];
const char *names[MAX] = {

您可以在编译器错误/警告中阅读以上内容,因此我建议您学习如何阅读它们,在这种情况下:

prog.cc:23:13: error: assigning to 'char *' from incompatible type 'char **'; remove &
     ptr[i] = &names[i];
            ^ ~~~~~~~~~

编译器可以准确地为您提供分配所在位置的信息,还可以为您提供准确的信息:remove &。这个输出来自clang,我认为它有一个最好的错误信息。

答案 1 :(得分:2)

Marcin所说的

ptr[i] = names[i];

这是因为names [i]实际上是一个指针。最后是为了打印

cout << ptr[i] << endl;

因为ptr [i]也是一个指针