在我编写此代码时,在 Borland C++ 中,编译器会给出此错误 --> "Lvalue required"
。
struct harf {
char word[10];
} pr[10];
void main() {
pr[0].word="Alireza"; //Lvalue required
getch();
}
我能做些什么?
在我编写此代码时,在 Borland C++ 中,编译器会给出此错误 --> "Lvalue required"
。
struct harf {
char word[10];
} pr[10];
void main() {
pr[0].word="Alireza"; //Lvalue required
getch();
}
我能做些什么?
不允许对数组进行赋值操作。C++ 不允许你这样做。要将数据复制到字符数组,请使用字符串复制功能。像这样使用它。
strcpy(pr[0].word,"Alireza");
另一种方法是自己使用循环执行逐字符复制。虽然更好地使用库函数。:)
这个问题也可能对你有所帮助。 不使用指针遍历 C 风格的数组 请记住,在 C++ 中不允许对数组进行复合操作。您不能直接对它们执行算术或逻辑运算。
您需要使用 strcpy(..) 或 strncpy(..)。您不能使用赋值运算符直接分配它。
strcpy(pr[0].word,"Alireza");
此外,既然您使用的是 C++,为什么不使用std::string
. 就像是:
std::string myString;
..
myString = "AlireZa";
利用 :
strncpy( pr[0].word, "Alireza", 10);
更安全的解决方案是:
strncpy( pr[0].word, "Alireza", sizeof(pr[0].word)/sizeof(pr[0].word[0]));
这样,如果单词数组发生变化,您就不必在代码的其他部分修复大小变化。使用 strncpy 被认为比 strcpy 更安全,因为第二个很容易导致缓冲区溢出。
不过,最好使用 std::string
pr[0].word
是内存中某个位置的数组。
"Alireza"
是内存中某个不同位置的另一个字符数组。
您的分配尝试重定向pr[0].word
到 Alireza 内存,这是无效的,因为pr[0].word
它是一个数组。您可以重定向指针,但不能重定向数组。您可以:
pr[0].word
指针,然后将指针设置为您现在尝试做的不同位置。"Alireza"
到内存pr[0].word
strcpy
pr[0].word
为 a which 将在一个方便的运算符std::string
下为你完成所有的内存复制魔法,再次有效。这种方法还可以帮助您避免在处理 "naked" 时可能出现的一些讨厌的错误。=
pr[0].word="Alireza"
char *
pr[0].word
是一个数组。您不能分配给数组。
在您的情况下,数组表达式衰减为指向第一个元素的指针,但该表达式是一个右值(因为显然尝试更改该指针是没有意义的!)。