当前位置:首页 » 编程语言 » c语言结构体怎么赋值
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言结构体怎么赋值

发布时间: 2022-01-31 22:10:23

c语言结构体数组成员怎么赋值

intmain(void){

structstudentsbao={};

printf("%d,%s ",bao.id,bao.name);//输出是4224528,空(应该是null)

//structstudentsbao={3,"123"};可以。第一种赋值方法

//strcpy(bao.name,"bao");//可以,

//printf("%d,%s ",bao.id,bao.name);

//bao.name="bao";错误“stray'351'inprogram”其他是乱码,

//bao.name[0]='a';

//bao.name[0]='/0';

//printf("%d,%s ",bao.id,bao.name);

/*这样可以,*/

//chararr[10]="baobao";

////bao.name=arr;//error""

//scanf("%s",bao.name);//可以,

//printf("%d,%s ",bao.id,bao.name);

//所以scanf那一类函数都可以。

//还有就是memcpy函数也是可以的

return0;

}

(1)c语言结构体怎么赋值扩展阅读

C语言结构体数组的直接赋值及数组的长度计算:

#include<stdio.h>

//自定义一个字符串的结构体,包含字符串和字符串长度两个变量

typedefstructStr{

charch[100];

intlength;//char数组(字符串)的长度

}myStr;

//刚开始声明变量时每个变量的字符串长度length都为0

//这里以长度为10的数组为例,数组长度是1000

//对第0个到第9个结构体数组的长度同时赋值为0

myStrmyStr1[10]={

[0...9]={

.length=0,

}

};

intmain(){

inti;

for(i=0;i<10;i++){

printf("%d ",myStr1[i].length);

}

return0;

}

⑵ 一个C语言结构体赋值的问题

可能是你的编译器要求所有的变量声明都应该放在函数体开头

⑶ C语言如何给结构体内的成员赋值

内存溢出,你的指针要指向一个你的结构体实体(实例)。一般定义一个指针的意思放的地址,而刚定义的指针放的地址是什么,这个一般不知道,可以就指向本不属于自己的地址,结果操作系统就把它给终止或者阻之于外了。

⑷ C语言,结构体中的数组怎么赋值,

(1)用字符常量逐个初始化数组。例如:

char a[8]={'i','l','o','v','e','y','o','u'};

把8个字符依次分别赋给c[0]~c[7]这8个元素。

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。

如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'')。

如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。

例如:char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};

这时c数组的长度自动定为9。也可以定义和初始化一个二维字符数组,例如:

char diamond[5][5]={{'','','#'},{'','#','','#'},{'#','','','','#'},

{'','#','','#'},{'','','#'}};用它代表一个菱形的平面图形。

(2)字符串常量初始化数组。例如:

char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};

可写为:char c[]={"C program"};

或去掉{}写为:char c[]="C program";

注意:此时数组c的长度不是9,而是10。因为字符串常量的最后由系统加上一个''。上面的初始化与下面的初始化等价。

char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m',''};

(4)c语言结构体怎么赋值扩展阅读:

其定义的一般形式是:char数组名[数据长度]

例如:

char c[10];

c[0]='I';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';

以上定义了c为字符数组,包含10个元素。

由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整型数组来存放字符数据,例如:

int c[10];

但这时每个数组元素占2个字节的内存单元,浪费存储空间。

字符数组也可以是二维或多维数组,例如:

char c[5][10];

即为二维字符数组。

初始化

字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。

输入输出

字符数组的输入

(1)用getchar()或scanf()的'%c'格式符对数组进行字符赋值。例如,对于数组a[10]:用getchar()赋值:

for(i=0;i&lt;10;i++)

a&lt;i&gt;=getchar();

用scanf()赋值:

for(i=0;i&lt;10;i++)

scanf("%c",&a&lt;i&gt;);

(2)用scanf()的'%s'格式对数组赋值。还是对于数组a[10]:

scanf("%s",a);

scanf("%s“,&a[0]);

输入”C program“并回车时,a数组会自动包含一个以”“结尾的字符串”C program“。

字符数组的输出

(1)用putchar()或printf()的‘%c’格式符对数组进行字符赋值。例如,对于数组a[10]:用putchar()赋值:

for(i=0;i&lt;10;i++)

a&lt;i&gt;=putchar();

用printf()赋值:

for(i=0;i&lt;10;i++)

printf("%c",a&lt;i&gt;);

输出结果为:

c program

(2)用printf()的'%s'格式对数组赋值。还是对于数组a[10];

printf("%s",a);

输出结果为:

c program

⑸ C语言结构体赋值的问题

VS不能完整支持所有C99的特性,如果你要使用,可以使用DevCPP,或者直接使用GCC编译


另外虽然char*filename这种形式也许不会出现问题,但为了可读性还是建议加上空格


另外给你摘抄来一段说明

⑹ C语言 如何在结构体中给嵌套的结构体赋值

结构体嵌套,赋初值,大括号嵌套就可以了。
问题是你代码写错了。
你定义的old1不是结构类型,而是结构变量。
在shuju中成员要写struct old 变量名;
不能写struct old1。
下面是演示代码:(补充:如果想定义一个结构类型别名,要用typedef

#include <stdio.h>

struct old

{

int year;

int month;

int day;

}old1={1972, 8, 3};

struct shuju

{

char name[10];

char gender[6];

int height;

struct old old1;

char access[9];

}shuju1={"moumouren","male",175,{2019,6,29},"well"};

int main()

{

printf("结构变量old1的初值: %d %d %d ",old1.year,old1.month,old1.day);

printf("结构变量shuju1中成员old1的初值:%d %d %d ",shuju1.old1.year,shuju1.old1.month,shuju1.old1.day);

printf("我特意起一样的名字,就是告诉你这两个变量是不一样的。 ");

return 0;

}

/*(补充:如果想定义一个结构类型别名,要用

typedef struct old

{

int year;

int month;

int day;

}old1;//这样old1才表示是一个类型,然后再定义该类型变量时,才可以写 old1 变量名;

)*/

⑺ c语言结构体里的一个元素如何赋值

typedef struct _BOOK_INFO
{
int nType;
}BookInfo;

赋值如下:

BookInfo bookinfo;
bookinfo.nType = 1;

如果满意的话,请给点分吧, 我严重缺分啊。 呵呵

⑻ C语言 结构体的赋值

这叫结构体变量声明与初始化。
按规定,花括号内的 初始化 数值,必须为常量。
struct student a[3]={zhangsan,{。。。。}; //错在初始化用了 非常量
你的结构数组a[3] 里用了变量 zhangsan, 语法上是错的。
你可以改成:
struct student a[3]={ {0}, {1002, 后面照抄。。。。。};
其中 {0} 是给数组元素 a[0] 初始化,充0 占位。
声明完毕,语句部分 另加一句赋值语句: a[0]=zhangsan; 就把zhangsan的数据传给a数组的 元素 a[0] 了。

⑼ c语言如何给结构体指针赋值

结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。

举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数

#include <stdio.h>

#include <stdlib.h>

struct student //建立结构体,学号,姓名,3门课的分数

{

int num;

char name[10];

int score[3];

}Stu[5]; //初始化,一共5个学生的数据

void getScore(struct student * p) //函数:向结构体读取分数,一共三门课

{

int i, j;

for (i = 0; i < 5; i++)

for (j = 0; j < 3; j++)

scanf_s("%d", (&(p+i)->score[j]));

}

void getNum(struct student * p) //函数:向结构体读取学号

{

int i;

for (i = 0; i < 5;i++)

scanf_s("%d", &(p + i)->num);

}

void getName(struct student * p) //函数:向结构体读取姓名

{

int i;

for (i = 0; i < 5; i++)

scanf("%s", &(p + i)->name);

}

int main()

{

int i, j, average[3] = { 0 }; //average数组储存每门课的平均分

getNum(Stu); //函数调用

getName(Stu);

getScore(Stu);

for (j = 0; j < 3; j++)

{

for (i = 0; i < 5; i++)

average[j] += Stu[i].score[j];

}

for (i = 0; i < 5; i++)

{

printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name); //依次打印学号 姓名

//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);

for (j = 0; j < 3; j++) //打印三门课的分数

printf(" %d", Stu[i].score[j]);

printf(" ");

}

printf("average:");

for (i = 0; i < 3; i++)

printf("%f ", (float)average[i]/5); //打印三门课平均分

printf(" ");

system("pause");

return 0;

}

如:

scanf("%c%c%c",&a,&b,&c);

输入为:

d e f

则把'd'赋予a, ' '(空格)赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。

只有当输入为:def(字符间无空格) 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。

⑽ C语言结构体赋值

首先这样编译会出错。
struct
{
char ch;
int pri;
}
定义结构体类型,后面没有跟分号,说明后面是该类型的变量列表,之后遇到Pri接下来的空格后面跟的lpri编译器就不知道要干什么了。
如果用struct
{
char ch;
int pri;
};,还是出错,因为之后的Pri没有声明或定义。
如果用struct Pri
{
char ch;
int pri;
};,纯C的话不行,Pri是结构体名而不是类型名,会编译出错。C++下会把Pri当作struct Pri,不会出错。
可以这么写:
typedef struct
{
char ch;
int pri;
}Pri;
Pri lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}};
Pri rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
最后两行也可以这样写:
Pri lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
注意倒数第二行是分号还是逗号会影响初始化列表的语义。
(顺便,这个不是赋值。)
话说回来,一开始的写法去掉Pri是正确的(只是定义之后无法访问该类型,一般不推荐):
struct
{
char ch;
int pri;
}
lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
====
[原创回答团]