为什么这段代码“初始化字符”不能正常工作?

时间:2012-09-02 12:37:38

标签: c++

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

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

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

我该怎么办?

5 个答案:

答案 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内存
  • 当您使用C ++时,您也可以将pr[0].word声明为std::string,它会在方便的=运算符下为您执行所有内存复制工具,使{{1} }再次有效。这种方法也可以帮助你避免一些讨厌的错误,否则在处理"裸体" pr[0].word="Alireza"