2017-01-12 15 views
-1

私はCプログラミングの新人で、質問があります。これは簡単なプログラムですが、なぜこのようなコンパイルエラーが出るのかわかりません。メイン関数の構造体を初期化する方法は?

#include<stdio.h> 
#include<conio.h> 
struct Book 
{ 
char book_name[20]; 
char auther[20]; 
int book_id; 
}; 

void main() 
{ 
struct Book b1; 
clrscr(); 

b1.book_name="c++"; 
b1.auther="xyz"; 
/* Above two line show compile time error Lvalue required */ 

b1.book_id=1002; 


printf("\n Book Name= %s",b1.book_name); 
printf("\n Book Auther= %s",b1.auther); 
printf("\n Book ID= %s",b1.book_id); 


getch(); 
} 
+3

Cで '='を使用して配列を割り当てることはできません。代わりに 'strcpy'と友人を使用してください。 –

+0

しかし、 'char'配列を文字列定数で*初期化することはできます。この問題は、イニシャライザで 'b1'を宣言することで対処できます。その場合は 'strcpy()'は必要ありません。 –

答えて

2

Cはchar配列(book_name)に文字列("c++")から割り当てを許可しません。代わりに、内容をコピーする必要があります:

もちろん
strcpy(b1.book_name, "c++"); 

、これはbook_name内容を格納するのに十分な大きさであることを前提としています。上記を快適にしたら、バッファを上書きしないように、strncpy()を調べることができます。