在Borland C ++编写此代码时,编译器会出现此错误 - > "Lvalue required"
。
struct harf {
char word[10];
} pr[10];
void main() {
pr[0].word="Alireza"; //Lvalue required
getch();
}
我该怎么办?
答案 0 :(得分:4)
阵列上不允许分配操作。 C ++不允许你这样做。 要将数据复制到字符数组,请使用字符串复制功能。 像这样使用它。
strcpy(pr[0].word,"Alireza");
另一种方法是使用循环自己通过char拷贝执行char。虽然更好地使用库函数。 :)
这个问题也可以帮到你。 Iterating through C-style array not using a pointer 请记住,C ++中的数组不允许复合操作。您不能直接对它们执行算术或逻辑运算。
答案 1 :(得分:2)
您需要使用strcpy(..)或strncpy(..)。您无法使用赋值运算符直接指定它。
strcpy(pr[0].word,"Alireza");
此外,由于您使用的是C ++,为什么不使用std::string
。类似的东西:
std::string myString;
..
myString = "AlireZa";
答案 2 :(得分:1)
使用:
strncpy( pr[0].word, "Alireza", 10);
稍微安全的解决方案是:
strncpy( pr[0].word, "Alireza", sizeof(pr[0].word)/sizeof(pr[0].word[0]));
这样,如果单词数组发生更改,则无需修复代码其他部分的大小更改。使用strncpy被认为比strcpy更安全,因为第二个很容易导致缓冲区溢出。
但是,最好使用std :: string
答案 3 :(得分:0)
pr[0].word
是一个数组。您无法分配给数组。
在你的情况下,数组表达式衰减到指向第一个元素的指针,但该表达式是一个右值(因为显然尝试更改指针是没有意义的!)。
答案 4 :(得分:0)
pr[0].word
是内存中某个位置的数组。
"Alireza"
是内存中某个不同位置的另一个char数组。
您的作业尝试将pr[0].word
重定向到Alireza内存,由于pr[0].word
是一个数组,因此该内存无效。您可以重定向指针,但不能重定向数组。你可以:
pr[0].word
指针,然后将指针设置为您现在尝试的不同位置。"Alireza"
功能将pr[0].word
内存的内容复制到strcpy
内存pr[0].word
声明为std::string
,它会在方便的=
运算符下为您执行所有内存复制工具,使{{1} }再次有效。这种方法也可以帮助你避免一些讨厌的错误,否则在处理"裸体" pr[0].word="Alireza"
。