2012-09-02 108 views
0

在Borland C++编写这段代码时,编译器给出了这个错误 - >"Lvalue required"为什么此代码“初始化字符”无法工作?

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

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

我该怎么办?

+4

我们可以值得一提的是,它不再是1996年了,而且现在有一个用于C++的*语言标准,并且还有很好的,免费的,一致的编译器可用。 (“自由”就像“免于外国统治”一样,而不仅仅是“免费啤酒”)。你应该*真的*抛弃'void main',并且可能也是C代码风格。 C++是与C非常不同的语言。 –

+0

试试'std :: string' ... – 2012-09-02 12:58:08

回答

1

使用:

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

略有safier的解决方案是:

strncpy(pr[0].word, "Alireza", sizeof(pr[0].word)/sizeof(pr[0].word[0])); 

这样,如果字的数组改变你不会有修复在你的代码的其他部分的尺寸变化。使用strncpy被认为比strcpy更安全,因为第二个很容易导致缓冲区溢出。

尽管如此,它能够更好地使用的std :: string

0

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

在你的情况,阵列式衰减到指针的第一个元素,但表达是一个右值(因为这显然是没有意义的尝试变化这个指针!)。

4

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

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

另一种方法是使用循环自己执行char by char copy。尽管更好地使用库函数。 :)

此问题可能也有帮助。 Iterating through C-style array not using a pointer 请记住,在C++中不允许使用复合操作。你不能直接对它们进行算术或逻辑运算。

+0

它不起作用我的先生! –

+0

它应该在逻辑上工作。 程序中必须有其他错误。 –

+0

好的,我做了一个错误,非常感谢 –

2

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

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

此外,由于您使用的是C++,为什么不使用std::string。喜欢的东西:

std::string myString; 
.. 
myString = "AlireZa"; 
0

pr[0].word是在存储器中的某些位置的阵列。

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

您的任务尝试将pr[0].word重定向到Alireza内存,由于pr[0].word是一个数组,因此无效。你可以重定向指针而不是数组。您可以:

  • 做出pr[0].word指针,然后设置指针到不同的位置,你现在做。
  • 复制"Alireza"内存pr[0].word存储器的内容,使用strcpy功能他人的建议
  • 正如你在C++中,你也可以声明pr[0].wordstd::string,将尽一切存储器复制你的魔法下方便=运营商,使得pr[0].word="Alireza"再次有效。这种方法也可以帮助您避免在处理“裸体”char *时可能发生的一些令人讨厌的错误。
相关问题