【问题标题】:error [Error] cannot convert 'char**' to 'char*' in assignment [closed]错误 [错误] 无法在分配中将 'char**' 转换为 'char*' [关闭]
【发布时间】:2016-06-30 09:44:47
【问题描述】:
#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;
}

【问题讨论】:

  • 你做了什么来尝试解决这个问题?除了将您的代码复制/粘贴到 SO 中吗?
  • 您是否考虑过检查编译器指向的行,看看是否有任何可疑之处?

标签: c++


【解决方案1】:

你需要改变:

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 &amp;。此输出来自 clang,我认为它是最好的错误消息之一。

【讨论】:

    【解决方案2】:

    马辛说的

    ptr[i] = names[i];
    

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

    cout << ptr[i] << endl;
    

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

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 2022-01-10
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多