【问题标题】:How to add strings to a 2d array of char elements?如何将字符串添加到 char 元素的二维数组?
【发布时间】:2011-03-27 19:16:42
【问题描述】:

我有以下用 C++ 编写的程序:

#include <iostream>

using namespace std;

int main()

{
    int age[5];
    char name[5][10];

    age[0]=10;
    age[1]=20;
    age[2]=30;
    age[3]=25;
    age[4]=40;

    name[0]="abc";
    name[1]="abc";
    name[2]="abc";
    name[3]="abc";
    name[4]="abc";

    cout<<name[0]<<" is "<<age[0]<<"years old";
    cout<<"\n";
    cout<<name[1]<<" is "<<age[1]<<"years old";
    cout<<"\n";
    cout<<name[2]<<" is "<<age[2]<<"years old";
    cout<<"\n";
    cout<<name[3]<<" is "<<age[3]<<"years old";
    cout<<"\n";
    cout<<name[4]<<" is "<<age[4]<<"years old";
    cout<<"\n\n";

    system("PAUSE");

}

当我编译并运行它时,我得到了这些错误:

错误 C2440:“=”:无法转换 从 'const char [3]' 到 'char [10]' 没有可以进行这种转换的上下文

错误 C2440:“=”:无法转换 从 'const char [2]' 到 'char [10]' 没有可以进行这种转换的上下文

错误 C2440:“=”:无法转换 从 'const char [2]' 到 'char [10]' 没有可以进行这种转换的上下文

错误 C2440:“=”:无法转换 从 'const char [2]' 到 'char [10]' 没有可以进行这种转换的上下文

错误 C2440:“=”:无法转换 从 'const char [2]' 到 'char [10]' 没有可以进行这种转换的上下文

我在 Windows 7 下运行 MSVC 2008。我尝试了许多可能的解决方案,但未能解决此问题。任何帮助将不胜感激,

【问题讨论】:

    标签: c++ string visual-c++ char


    【解决方案1】:

    您将name 数组视为这样定义的:

    char *name[5];
    

    所以要么这样定义它,要么使用下面的代码来填充它:

    strcpy(name[0], "abc");
    strcpy(name[1], "abc");
    strcpy(name[2], "abc");
    strcpy(name[3], "abc");
    strcpy(name[4], "abc");
    

    我更喜欢前一种选择。关键是您试图将char * 分配给char [],这就是strcpy 的用途。鉴于您在这种情况下无论如何都在操作初始化的 C 字符串,您不妨在整个代码中处理 char *

    【讨论】:

      【解决方案2】:

      您应该为此使用std::string。在 C++ 中不推荐使用 char*char[] 来表示字符串,原因有很多。

      【讨论】:

        【解决方案3】:

        给定程序 sn-p,name 可以在声明本身初始化。

        char name[5][10] = { "abc", "abc", "abc", "abc", "abc" } ;
               // ^ index 5 is not necessary. char name[][10] = { .. } would also suffice.   
        

        指定每行的长度为 10,但只使用它的前 3 个索引。每个 3rd 索引(即数组中的第 4 个元素)都会自动添加一个 '\0'

        age数组也可以初始化。

        【讨论】:

          【解决方案4】:

          您也可以使用std::string name[10] 代替二维字符数组。在这种情况下,只有您可以通过运算符“=”为字符串分配新值。 否则,您应该使用char* 的数组并使用strcpy() 函数进行赋值。

          【讨论】:

            猜你喜欢
            • 2022-11-28
            • 2019-06-10
            • 1970-01-01
            • 1970-01-01
            • 2021-03-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-17
            相关资源
            最近更新 更多