2010-11-16 95 views
6

我想了解在C中的结构,但我不明白为什么我不能标题指定为我我的例子:C结构问题

#include <stdio.h> 

struct book_information { 
char title[100]; 
int year; 
int page_count; 
}my_library; 


main() 
{ 

my_library.title = "Book Title"; // Problem is here, but why? 
my_library.year = 2005; 
my_library.page_count = 944; 

printf("\nTitle: %s\nYear: %d\nPage count: %d\n", my_library.title, my_library.year, my_library.page_count); 
return 0; 
} 

错误消息:

books.c: In function ‘main’: 
books.c:13: error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’ 

回答

9

LHS是一个数组,RHS是一个指针。您需要使用strcpy将指向的字节放入数组中。

strcpy(my_library.title, "Book Title"); 

请小心,因为你需要空间,一个字符串终止空(“\ 0”)字符不要复制源数据> 99个字节长在这里。再次

error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’

看看你的原代码,看看现在这将使更多的意义:

编译器试图告诉你什么是错的一些细节。

+0

谢谢,在添加“#include ”后,程序编译并按预期工作。我发现的所有例子都使用了scanf或者填充字符串,这对我来说是有意义的。 – 2010-11-16 17:33:19

+0

谢谢彼得。我会考虑'strncpy'的替代品,除非你确定你的输入数据总是足够小以适应。 – 2010-11-16 17:36:45

+0

尽管包含strings.h可能会在您的实现中发生,但您确实应该包含string.h来声明strcpy。 – 2010-11-16 18:26:36

6

正如消息所述,问题在于您试图指定不兼容的类型:char*char[100]。您需要使用的功能像strncpy到2

strncpy(my_library.title, "Book Title", sizeof(my_library.title)); 
+2

'sizeof(my_library.title)-1',不是? – 2010-11-16 17:25:04

+0

@Oli的确如此。精神上打击了我自己的网站。 – JaredPar 2010-11-16 17:26:25

1

的char *和字符[100]不同类型之间的数据复制。

您想要复制.title缓冲区中的那些char元素。

strncpy(my_library.title, "Book Title", sizeof(my_library.title)); 
3

title字符数组 - 这些是不可分配在C.使用strcpy(3)