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");

これを行う別の方法は、自分でループを使用して char by char コピーを実行することです。ただし、ライブラリ関数を使用することをお勧めします。:)

この質問も役立つかもしれません。 ポインターを使用しない 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"メモリ内の別の場所にある別のchar配列です。

pr[0].word割り当てはAlirezaメモリにリダイレクトしようとしますが、これはpr[0].word配列であるため無効です。ポインタはリダイレクトできますが、配列はリダイレクトできません。次のいずれかを実行できます。

  • ポインタを作成してpr[0].wordから、今やろうとしているようにポインタを別の場所に設定します。
  • 他の人が提案した機能を使用して、メモリの内容を"Alireza"メモリにコピーしますpr[0].wordstrcpy
  • C ++を使用しているので、すべてのメモリを実行するpr[0].wordとして宣言することもできます。std::string便利な=演算子の下で魔法をコピーして、pr[0].word="Alireza"再び有効にします。このアプローチは、「裸」を扱うときに発生する可能性のある厄介なバグを回避するのにも役立つ場合がありますchar *
于 2012-09-02T12:45:00.083 に答える
0

pr[0].word配列です。配列に割り当てることはできません。

あなたの状況では、配列式は最初の要素へのポインターに減衰しますが、その式は右辺値です (明らかにそのポインターを変更しようとしても意味がないためです!)。

于 2012-09-02T12:39:31.240 に答える