struct room
{
char venue[15]; //variable
}
*stream;
.
.
.
void idealounge(){
int i,idealounge[10];
char room1[10]="MMLC";
*** ** stream->venue = room1;*****
}
这是一个房间预订系统。
房间的名字叫MMLC。
我希望它可以存储“MMLC”到流-〉场地,但它显示错误,如“不兼容的值”等。
2条答案
按热度按时间zxlwwiss1#
声明:
声明
venue
为char
的大小为15的数组。使用字符串文字
"MMLC"
初始化room1
的前4个字节,将其余字节设置为\0
。然后,
是无效的,因为
venue
是数组,而不是指针。数组不是可修改的左值。您不能像这样对数组赋值。如果要将
room1
的内容复制到venue
的内容,请使用标准strcpy()
。话虽如此,
只为指针分配空间,指针未初始化,也未指向任何有意义的内容。因此,首先分配内存并初始化指针:¹
然后检查是否成功:²
现在执行字符串复制。
或者,您可以使用自动存储持续时间来分配
struct
,这更简单,也更不容易出错:然后把它的地址赋给指针
这样就避免了动态内存分配的需要,而动态内存分配可能会在以后的
free()
中失败。**[1]**- 注意,我没有强制转换
malloc()
的结果。malloc()
返回一个泛型void *
或void
指针,它会自动提升为正确的类型。因此不需要强制转换,这样做可能隐藏潜在的bug。**[2]**- POSIX兼容系统在
malloc()
失败时设置errno
,上面的代码片段假设它是这样的。但是您可能不希望将其视为理所当然,并以另一种方式处理错误。vd2z7a6w2#
你应该这样写。