为c中的箭头指针分配字符

dkqlctbz  于 2023-01-29  发布在  其他
关注(0)|答案(2)|浏览(82)
struct room
{
    
    char venue[15];  //variable
    
    
    
}
 *stream;
.
.
.
void idealounge(){
    int i,idealounge[10];
    
    char room1[10]="MMLC";

    ***  **  stream->venue = room1;*****
    
      
    }

这是一个房间预订系统。
房间的名字叫MMLC。
我希望它可以存储“MMLC”到流-〉场地,但它显示错误,如“不兼容的值”等。

zxlwwiss

zxlwwiss1#

声明:

char venue[15];

声明venuechar的大小为15的数组。

char room1[10]="MMLC";

使用字符串文字"MMLC"初始化room1的前4个字节,将其余字节设置为\0
然后,

stream->venue = room1;

是无效的,因为venue是数组,而不是指针。数组不是可修改的左值。您不能像这样对数组赋值。
如果要将room1的内容复制到venue的内容,请使用标准strcpy()
话虽如此,

struct room
{
    char venue[15];  //variable      
}
 *stream;

只为指针分配空间,指针未初始化,也未指向任何有意义的内容。因此,首先分配内存并初始化指针:¹

stream = malloc (sizeof (struct room));

然后检查是否成功:²

if (!stream) {
    perror ("malloc()"); 
    /* handle error here...*/
}

现在执行字符串复制。
或者,您可以使用自动存储持续时间来分配struct,这更简单,也更不容易出错:

struct room bedroom;

然后把它的地址赋给指针

stream = &bedroom;

这样就避免了动态内存分配的需要,而动态内存分配可能会在以后的free()中失败。

**[1]**- 注意,我没有强制转换malloc()的结果。malloc()返回一个泛型void *void指针,它会自动提升为正确的类型。因此不需要强制转换,这样做可能隐藏潜在的bug。

  • 另请参阅:Do I cast the result of malloc? *
    **[2]**- POSIX兼容系统在malloc()失败时设置errno,上面的代码片段假设它是这样的。但是您可能不希望将其视为理所当然,并以另一种方式处理错误。
vd2z7a6w

vd2z7a6w2#

struct room
{
    char venue[15];  //variable
}
 *stream = NULL;
 
void idealounge() {
    int i;
    int idealounge[10];
    
    char room1[10]="MMLC";
    stream = (struct room *)malloc(sizeof(struct room));
    strcpy(stream->venue, room1);
}

你应该这样写。

相关问题