关于结构体字符串的赋值问题

先看错误的代码

 
#include<stdio.h>
typedef struct 
{
	char name[20];
	int i;
 
}Book;

int main()
{
	Book a;
	a.name="android";//出问题,C语言中结构体赋值不能直接这样做!
	a.i=8;//但是不是数组可以

	return  0;
} 

这里给出几个解决方案:

1:将数组改成指针:

#include<stdio.h>
typedef struct
{
	char *name;   //那就不用数组,改成指针就没毛病
	int i;
}Book;

int main()
{
	Book a;
	a.name="android";
	a.i=8;
	return 0;
}

2:使用scanf输入:

#include<stdio.h>
typedef struct
{
	char name[20];
	int i;
}Book;

int main()
{
	Book a;

	scanf("%s",&a.name );//实际上这样做也没毛病!我也有点纳闷。后面知道在回复!

	a.i=8;
	return 0;
}

3:定义时赋初值:

#include<stdio.h>
typedef struct
{
	char name[20];
	int i;
}Book;

int main()
{
	Book a={"android",8};//只能在定义时这样做,下面错误示例

    //Book a;
    //a={"android",8};    这样不允许

	a.i=8;
	return 0;
}

4:使用#include <string.h>里面的拷贝函数

#include<stdio.h>
#include<string.h>
typedef struct
{
	char name[20];
	int i;
}Book;

int main()
{
	Book a;
	strcpy(a.name,"android");  //这样做也不错的选择
	a.i=8;
	return 0;
}

 

全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务