我有以下用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.我尝试了很多可能的解决方案,但我没有解决这个问题。任何帮助将不胜感激,
答案 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 []
,strcpy
是char *
。鉴于你在这种情况下操纵初始化的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()
函数进行分配。