C++ IntelliSense:表达式必须是可修改的左值+;功能

C++ IntelliSense:表达式必须是可修改的左值+;功能,c++,C++,这是一个很容易的问题,但我无法解决。 给你 struct Person{ char name[20]; char family[20]; char tel[20]; }; Person p[40]; string newName 及 我想编写一个函数,在其中我可以用newName替换p[numPerson].name,但出现了一个错误!:IntelliSense:表达式必须是可修改的左值 希望有人能帮忙 char name[20]; string newName

这是一个很容易的问题,但我无法解决。 给你

struct Person{
    char name[20];
    char family[20];
    char tel[20]; 
};

Person p[40];
string newName 

我想编写一个函数,在其中我可以用newName替换p[numPerson].name,但出现了一个错误!:IntelliSense:表达式必须是可修改的左值 希望有人能帮忙

char name[20];
string newName
它们都是不同的物种。正如你所知道的,不同的物种之间不容易混淆


更好的方法是始终使用std::string。

您可以通过以下方法解决此问题
1.

2.
注意:如果要更改族,请将其数据类型设置为字符串

struct Person{
            string name;
            char family[20];
            char tel[20];
        }Person p[40];
    string newName;
    p[numPerson].name = newName;


字符名[20]
不是
std::string
。为什么不使用
字符串名称
struct Person
中声明它?这种固定长度的
char
字段总是以零结尾是很不寻常的。如果它们不是以零结尾,
strcpy
将尝试读取
newName
的结尾以外的内容,并尝试写入
name
的结尾以外的内容。在这种情况下,
memcopy可以使用strncpy
 struct Person{
        char name[20];
        char family[20];
        char tel[20];
    }Person p[40];
char  newName[20];
strcpy(p[numPerson].name,newName);
struct Person{
            string name;
            char family[20];
            char tel[20];
        }Person p[40];
    string newName;
    p[numPerson].name = newName;