为什么我不能更改结构的字符数组属性?

Why I can't change char array attribute of a struct?

本文关键字:字符 数组 属性 结构 不能 为什么      更新时间:2023-10-16

这个问题很简单,但我很困惑为什么结构会像这样,因为它的所有成员都是默认public的,看看下面的代码

struct Student
{
   char name[20];
}
int main()
{
   Student s;
   s.name="ahmed";
}

此代码给出一个错误,即名称应该是可修改的左值。

但是如果我在char char的循环中分配值,那么它像这样工作正常

s.name[0]='a';//works fine

C 中的数组是不可分配和不可复制初始化的,C++此行为是继承的。在右侧数组衰减为指针,但在您的情况下,您的复制初始化是不允许的。

如果您尝试此操作:

{
   char name[20];
   name="ahmed";
}

您实际上是在复制初始化数组 - 这是不允许的

唯一的例外是使用字符串文本初始化它们

 char c[] = "abc";

在您的情况下,您应该使用一个名为 strcpy 的函数来完成此操作:

{
   char name[20];
   strcpy(&name[0],"ahmed"); // Obviously make sure that there's enough space
}

值得注意的是,您还可以使用字符串来完成此任务:

#include<iostream>
#include<string>
using namespace std;
struct Student{
   string name;
};
int main()
{
   Student s;
   s.name = "ahmed";
}

在您的情况下,结构不是问题。C 中的数组不可分配。

代替s.name = "ahmed",使用strcpy(s.name,"ahmed")

name是一个数组,你不能分配给数组名称。相反,您应该在cstring中使用std::strcpy来复制 C 样式字符串的内容。

std::strcpy(s.name, "ahmed");

请注意,该问题与namestruct的一部分这一事实无关。对于本机char数组,您会遇到同样的问题。

您必须使用:

struct Student
{
   char *name;
};
int main()
{
   Student s;
   s.name = "ahmed";
   return 0;
}