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

时间:2014-02-08 10:42:58

标签: c++ string struct arrays

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

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

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

但是,如果我通过char在循环char中指定值,那么它就可以正常工作

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

5 个答案:

答案 0 :(得分:2)

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
}

答案 1 :(得分:2)

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

#include<iostream>
#include<string>
using namespace std;

struct Student{
   string name;
};

int main()
{
   Student s;
   s.name = "ahmed";
}

答案 2 :(得分:2)

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

而不是s.name = "ahmed",请使用strcpy(s.name,"ahmed")

答案 3 :(得分:1)

name是一个数组,您无法分配给数组名称。相反,您应该使用std::strcpy中的cstring来复制C风格字符串的内容。

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

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

答案 4 :(得分:0)

您必须使用:

struct Student
{
   char *name;
};

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