我很困惑为什么在初始化结构变量时出现错误。我在Stack Overflow上找到了一些相关的线程,但它们没有解决我的问题。任何人都可以解释导致问题的原因吗?
//I have used Dev-C++ compiler
//Getting an error 'b1' undeclared
struct book
{
char name ;
float price ;
int pages ;
};
struct book b1;
int main()
{
/* First i have tried following way to initialize the structure variable,
but compiler throws the error
b1 = {"John", 12.00, 18};
*/
//I have tried to initialize individually ....but still getting error...?
b1.name = "John";
b1.price = 12.3;
b1.pages = 23;
printf ( "\n%s %f %d", b1.name, b1.price, b1.pages );
system("pause");
return 0;
}
答案 0 :(得分:0)
<强>问题强>
只有一个字节内存可用于name
字段。像char name[100]
使用strcpy()
代替b1.name = "John"
;
答案 1 :(得分:0)
您显然想要struct
中的字符串变量,但您将其声明为char name;
(单字符)。
而是使用char
指针(const char *name
)或char
数组(char name[100]
)。在后一种情况下,您必须使用strcpy(b1.name, "John")
。
答案 2 :(得分:0)
问题是您已将name
声明为char
。这意味着name
只会包含一个char
,而不是整个字符串。
您可以将name
静态分配为char
:
char name [25] // or whatever length you think is appropriate
// remember to leave room for the NUL character
然后,您需要使用strcpy()
将实际名称复制到结构中。
或者,您可以将name
声明为char:
char* name;
在这种情况下,您可以将指针设置为字符串文字:
name = "John";
但在大多数现实生活中,这不是一个选项,因为您将从文件或标准输入中读取名称。因此,您需要将其读入缓冲区,将指针设置为堆上动态分配的内存(缓冲区的字符串长度为NUL
的+1),然后使用strcpy()
。
答案 3 :(得分:0)
您必须对代码进行一些调整才能使其正常工作。
char name; // only one byte is allocated.
定义char数组以在C中存储字符串。
char name[20]; //stores 20 characters
char *name; //Pointer variable. string size can vary at runtime.
为结构创建对象后,只能使用该对象提供数据。
(即)object.element = something;
b1 = {"John", 12.00, 18}; // Not possible
只有在定义对象时才可以进行上述初始化。
struct book b1={"John", 12.00, 18}; //Possible
如果在struct中定义了 char * name ,则可以执行以下操作。
struct book b1;
b1.name="John"; // Possible
b1.price=12.00; // Possible
b1.pages=18; // Possible
如果使用字符数组字符名称[20] ,则可以执行以下操作。
struct book b1;
strcpy(b1.name,"John"); // Possible
b1.price=12.00; // Possible
b1.pages=18; // Possible