表达式必须是可修改的左值(字符数组)

Expression must be Modifiable lvalue (char array)

我将我的结构定义为:

struct taxPayer{
  char name[25];
  long int socialSecNum;
  float taxRate;
  float income;
  float taxes; 
};

我的主要功能包括:

taxPayer citizen1, citizen2;

citizen1.name = "Tim McGuiness";
citizen1.socialSecNum = 255871234;
citizen1.taxRate = 0.35;

citizen2.name = "John Kane";
citizen2.socialSecNum = 278990582;
citizen2.taxRate = 0.29;

编译后在citizen1.name = "Tim McGuiness";citzen2.name = "John Kane";[=17=上出现错误(C3863数组类型char[25]不可赋值,表达式必须是可修改的左值) ]

如何消除此错误并将 citizen1.name 设置为一个名称并将 citizen2.name 设置为另一个名称?

不能赋值给数组。你可以做的是使用 std::string or use std::strcpy/std::strncpy,比如

std::strncpy(citizen1.name,"Tim McGuiness", sizeof(taxPayer::name));

由于您使用 C++,我建议使用 std::string

struct taxPayer
{
    std::string name;
    // the rest
};

然后您可以像在代码中那样简单地分配给它

citizen1.name = "Tim McGuiness";

在c中,数组只能在初始化期间赋值,citizen1.name是char类型的数组。要解决你的问题,你可以使用这个:

strcpy(citizen1.name, "Tim McGuiness");

或:

memcpy(citizen1.name, "Tim McGuiness", strlen("Tim McGuiness"));
citizen1.name[strlen("Tim McGuiness") + 1] = '[=11=]';

我做了一些研究,也许有点晚了,但它可能会对这里的人有所帮助。

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

int main() {
int i, j;

char cuvinte[5][10] = { "a", "b", "c",
                        "da", "e" };
char temp[10];
int lungime = sizeof(cuvinte) / sizeof(cuvinte[0]);

for (i = 0; i < lungime - 1; i++) {
    for (j = 0; j < lungime - 1; j++) {
        if (strcmp(cuvinte[j], cuvinte[j+1]) < 0) {
            strcpy_s(temp, cuvinte[j]);
            strcpy_s(cuvinte[j],cuvinte[j+1]);
            strcpy_s(cuvinte[j+1],temp);
        }
    }
}

for (i = 0; i < lungime;i++) {
    cout << cuvinte[i] << " ";
}


system("pause");
}