错误 [错误] 无法在分配中将'char**'转换为'char*'

error [Error] cannot convert 'char**' to 'char*' in assignment

本文关键字:char 错误 转换 分配      更新时间:2023-10-16
#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;
}

您需要更改:

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

to

ptr[i] = names[i];

另一件事是您应该将文字存储为const char*而不是char*,因此也更改:

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

to:

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,我认为这是最佳错误消息之一。

Marcin所说的

ptr[i] = names[i];

这是因为名称[i]实际上是指指针。最后是为了打印

cout << ptr[i] << endl;

因为ptr [i]也是指针