C++ 默认情况下,分配给char数组的值是否为常量
如果我尝试给char数组赋值。它给出了错误。 错误“=”:无法从“常量字符[5]”转换为“字符”。C++ 默认情况下,分配给char数组的值是否为常量,c++,arrays,C++,Arrays,如果我尝试给char数组赋值。它给出了错误。 错误“=”:无法从“常量字符[5]”转换为“字符”。 为什么分配给char数组的值总是常量 class Employee { public: string name; char id[100]; int age; long salary; Employee() { name = "NULL"; id[100]= "NULL";
为什么分配给char数组的值总是常量
class Employee
{
public:
string name;
char id[100];
int age;
long salary;
Employee()
{
name = "NULL";
id[100]= "NULL";
age = 0;
salary = 0;
};
};
这里我不能赋值,因为“NULL”被认为是常量字符。而我的id是char。
为什么“NULL”是常量
而如果我们单独检查,则可以更改数组值
{
char i[10]="maha";
i[1]='z';
cout<<i[0]<<i[1]<<i[2]<<i[3]<<endl;
}
{
chari[10]=“maha”;
i[1]='z';
cout您试图在id
的第100个数组索引中填充maha
,这是不可能的。该数组只有100个索引,您试图访问超出范围的索引
请注意,可以在初始化期间初始化字符数组,但不能在赋值期间初始化字符数组
char i[10] = "maha";
语法是一种初始化,而:
char id[100];
id[100] = "maha"; // incorrect
这是一项任务
有两种可能的解决方法:
方法1:使用strcpy()
-
方法2:使用指针和内存分配-
const int SIZE = 100;
char *str = new char[SIZE];
str = "maha"; // it's now modifable lvalue
您试图在id
的第100个数组索引中填充maha
,这是不可能的。该数组只有100个索引,您试图访问超出范围的索引
请注意,可以在初始化期间初始化字符数组,但不能在赋值期间初始化字符数组
char i[10] = "maha";
语法是一种初始化,而:
char id[100];
id[100] = "maha"; // incorrect
这是一项任务
有两种可能的解决方法:
方法1:使用strcpy()
-
方法2:使用指针和内存分配-
const int SIZE = 100;
char *str = new char[SIZE];
str = "maha"; // it's now modifable lvalue
在您的数组中,总大小为100(索引0-99),您试图将索引设置为100,这超出了范围
这里的array is char表示每个索引只能设置一个字符。不能设置id[10]=“maha”
您可以使用memset函数初始化数组,如下所示
memset(&id[0],0x00,sizeof(id))
使用memcpy更新数组
memcpy(&id[10], "maha", 4)
个人字符更新
id[10] = 'm'
id[11] = 'a'
id[12] = 'h'
id[13] = 'a'
在您的数组中,总大小为100(索引0-99),您试图将索引设置为100,这超出了范围
这里的array is char表示每个索引只能设置一个字符。不能设置id[10]=“maha”
您可以使用memset函数初始化数组,如下所示
memset(&id[0],0x00,sizeof(id))
使用memcpy更新数组
memcpy(&id[10], "maha", 4)
个人字符更新
id[10] = 'm'
id[11] = 'a'
id[12] = 'h'
id[13] = 'a'
你不能分配数组,即使你可以,<代码> ID [100 ] < /C>不是一个数组,而是一个代码> char < /C>(这是不存在的,因为数组只有100个元素)。在你最喜欢的C++书籍中读一些关于数组的文章。你不能分配数组,即使你可以,<代码> ID [100 ] < /C>不是一个数组,而是一个代码> char < /C>(这是不存在的,因为数组只有100个元素)。在你最喜欢的C++书籍中,再阅读一些有关数组的内容。请你解释一下,*STR指向数组的第一个元素。所以,如果我们不增加它,那么如何“马哈”。是否已分配?如*str在第一个索引“m”上添加,则下一个“a”将如何放置在下一个索引上location@LittleStar是的,我也承认只有字符数组中的第一个字符是指向的,并且在解引用时它也会被打印出来。但是剩余字符“a”“h”“a”的内存是一个接一个地分配的。你能解释一下这一点吗t*str指向数组的第一个元素。所以,若我们不增加它,那个么整个“maha”有多大是否已分配?如*str在第一个索引“m”上添加,则下一个“a”将如何放置在下一个索引上location@LittleStar是的,我也承认只有字符数组中的第一个字符是指向的,并且在解引用时它也会被打印出来。但是剩余字符“a”“h”“a”的内存是一个接一个地分配的。这在数组[100]中是如何分配的我给第100个索引赋值?就像我的第二个代码一样。在i[10]中我给了“maha”,所以m在第0个索引上而不是在第11个索引上。在数组[100]中这是怎么回事?我给第100个索引赋值?就像我的第二个代码一样。在i[10]中我给了“maha”,所以m在第0个索引上而不是在第11个索引上。您可以通过更改memcpy中的值来更改索引(&id[0],“maha”,4)或者您也可以使用strcpy(&id[0],“maha”)。当您在该点值处初始化字符数组时,默认情况下从第0个索引开始,然后您需要使用memcpy或strcpy来更新数组。在数组[100]中,我如何将值分配给第100个索引?就像我的第二个代码一样。在i[10]中,我已经分配了“maha”所以m在第0个索引上而不是第11个。在数组[100]中,我是如何给第100个索引赋值的?就像我的第二个代码一样。在i[10]中,我给了“maha”,所以m在第0个索引上而不是第11个索引。您可以通过更改memcpy中的值来更改索引(&id[0],“maha”,4),也可以使用strcpy(&id[0],“maha”)。在该点初始化char数组时,默认情况下从第0个索引开始,然后需要使用memcpy或strcpy更新数组。