关于C/C++中的结构体赋值问题

在C++11标准中,是允许对结构体进行以下赋值操作的:
#include <bits/stdc++.h>
struct book{
    char title[200];
    char author[200];
    float val;
};


int main()
{
  struct book lib {
   // "The Pious Pirate and The Devious Damsel",
    "Renee",
    1.95
  };
 printf("%s",lib.title);
  return 0;


}



既可以部分初始化,也可以全部初始化。输出结果为 Renee。
但是万万不可进行下列赋值操作:
#include <bits/stdc++.h>
struct book{
    char title[200];
    char author[200];
    float val;
};


int main()
{
  struct book lib;
  lib.title="hahahaha";
return 0;
}


理由是"hahahaha"为const char类型,不可以赋值给title这个char类型的数组。
但是,如果把title改为字符指针呢?
#include <bits/stdc++.h>
struct book{
    char *title;
    const char *author;
    float val;
};


int main()
{
  struct book lib;
  lib.title="hahahaha";
  lib.author="hohohoho";
printf("%s %s",lib.title,lib.author);
return 0;
}



输出是:hahahaha hohohoho
说明无论把字符串赋给char*p还是const char*p的字符指针都是可以的。(如果是数字数组,则完全可以单独赋值)

但是,用指针会有一个潜在的危险!!

由于该指针未经过初始化,地址可以指向任何值。所以这一操作可能会会导致程序崩溃!

如果非要想用数组表示然后在后面进行初始化,则可以使用.运算符进行赋值。

//此处title和author为字符数组
struct book lib={ .title="Renee",
		  .author="James",
		  25.99};
//或者直接使用scanf给字符数组赋值
scanf("%s",title);


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值