如何将字符串添加到char元素的二维数组?

时间:2011-03-27 19:16:42

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

我有以下用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.我尝试了很多可能的解决方案,但我没有解决这个问题。任何帮助将不胜感激,

4 个答案:

答案 0 :(得分:3)

您正在处理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 []strcpychar *。鉴于你在这种情况下操纵初始化的C字符串,你可以在整个代码中处理{{1}}。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

鉴于程序片段,可以在声明本身初始化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数组的情况下完成。

答案 3 :(得分:0)

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