Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 默认情况下,分配给char数组的值是否为常量_C++_Arrays - Fatal编程技术网

C++ 默认情况下,分配给char数组的值是否为常量

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数组赋值。它给出了错误。 错误“=”:无法从“常量字符[5]”转换为“字符”。
为什么分配给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更新数组。