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");
これを行う別の方法は、自分でループを使用して char by char コピーを実行することです。ただし、ライブラリ関数を使用することをお勧めします。:)
この質問も役立つかもしれません。 ポインターを使用しない 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"
メモリ内の別の場所にある別のchar配列です。
pr[0].word
割り当てはAlirezaメモリにリダイレクトしようとしますが、これはpr[0].word
配列であるため無効です。ポインタはリダイレクトできますが、配列はリダイレクトできません。次のいずれかを実行できます。
pr[0].word
から、今やろうとしているようにポインタを別の場所に設定します。"Alireza"
メモリにコピーしますpr[0].word
strcpy
pr[0].word
として宣言することもできます。std::string
便利な=
演算子の下で魔法をコピーして、pr[0].word="Alireza"
再び有効にします。このアプローチは、「裸」を扱うときに発生する可能性のある厄介なバグを回避するのにも役立つ場合がありますchar *
。pr[0].word
配列です。配列に割り当てることはできません。
あなたの状況では、配列式は最初の要素へのポインターに減衰しますが、その式は右辺値です (明らかにそのポインターを変更しようとしても意味がないためです!)。