0

在我编写此代码时,在 Borland C++ 中,编译器会给出此错误 --> "Lvalue required"

struct harf {
   char word[10];
} pr[10];

void main() {
  pr[0].word="Alireza"; //Lvalue required
  getch();
}

我能做些什么?

4

5 回答 5

4

不允许对数组进行赋值操作。C++ 不允许你这样做。要将数据复制到字符数组,请使用字符串复制功能。像这样使用它。

strcpy(pr[0].word,"Alireza");

另一种方法是自己使用循环执行逐字符复制。虽然更好地使用库函数。:)

这个问题也可能对你有所帮助。 不使用指针遍历 C 风格的数组 请记住,在 C++ 中不允许对数组进行复合操作。您不能直接对它们执行算术或逻辑运算。

于 2012-09-02T12:39:48.407 回答
2

您需要使用 strcpy(..) 或 strncpy(..)。您不能使用赋值运算符直接分配它。

strcpy(pr[0].word,"Alireza");

此外,既然您使用的是 C++,为什么不使用std::string. 就像是:

std::string myString;
..
myString = "AlireZa";
于 2012-09-02T12:39:56.560 回答
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

于 2012-09-02T12:39:16.060 回答
0

pr[0].word是内存中某个位置的数组。

"Alireza"是内存中某个不同位置的另一个字符数组。

您的分配尝试重定向pr[0].word到 Alireza 内存,这是无效的,因为pr[0].word它是一个数组。您可以重定向指针,但不能重定向数组。您可以:

  • 制作一个pr[0].word指针,然后将指针设置为您现在尝试做的不同位置。
  • 使用其他人建议的功能将内存的内容复制"Alireza"到内存pr[0].wordstrcpy
  • 正如你在 C++ 中一样,你也可以声明pr[0].word为 a which 将在一个方便的运算符std::string下为你完成所有的内存复制魔法,再次有效。这种方法还可以帮助您避免在处理 "naked" 时可能出现的一些讨厌的错误。=pr[0].word="Alireza"char *
于 2012-09-02T12:45:00.083 回答
0

pr[0].word是一个数组。您不能分配给数组。

在您的情况下,数组表达式衰减为指向第一个元素的指针,但该表达式是一个右值(因为显然尝试更改该指针是没有意义的!)。

于 2012-09-02T12:39:31.240 回答