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

如题所述

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

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

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

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

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

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

例如: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。因为字符串常量的最后由系统加上一个'\0'。上面的初始化与下面的初始化等价。

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

扩展资料:

其定义的一般形式是: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<10;i++)

a<i>=getchar();

用scanf()赋值:

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

scanf("%c",&a<i>);

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

scanf("%s",a);

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

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

字符数组的输出

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

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

a<i>=putchar();

用printf()赋值:

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

printf("%c",a<i>);

输出结果为:

c program

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

printf("%s",a);

输出结果为:

c program

参考资料:

百度百科——字符数组

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-14
你程序中的那种赋值方式只能在数组定义的时候赋值,定义完成后,就要一个一个的赋值。比如:s.a[0]
=
1;s.a[1]
=
2;如果赋值有一定规律的话,可以用for循环;如果赋的值一样的话,可以用
memset(s.a,0,sizeof(s.a));,memset一般用于数组初始化和清零。
第2个回答  2020-02-24
对于已经定义好了的数组,肯定不能用这样赋值啦,给结构体赋值其实就跟其他的变量赋值一样,难道你可以
int
a[3];
a={0,1,2};
这个给一个int数组赋值吗,不行啊。
正确的做法就是像其他变量一样一个一个赋值,当然也可在结构体初始化时赋值
第3个回答  2020-02-21
如果没记错的话只能是数组初始定义的时候才可以这样赋值。
只能一个一个赋值,s.a[0]=1;
这样是合法的
想给数组赋值的话用循环吧

C语言,结构体中的数组怎么赋值,?
intmain(void){ structstudentsbao={};printf("%d,%s\\n",bao.id,bao.name);\/\/输出是4224528,空(应该是null)\/\/structstudentsbao={3,"123"};可以。第一种赋值方法 \/\/strcpy(bao.name,"bao");\/\/可以,\/\/printf("%d,%s\\n",bao.id,bao.name);\/\/bao.name="bao";错误“stray'\\351'in...

c语言结构体数组赋值
(1)用字符常量逐个初始化数组。例如:char a[8]={'i','l','o','v','e','y','o','u'};把8个字符依次分别赋给c[0]~c[7]这8个元素。如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语...

结构体二维数组的赋值与定义
结构体二维数组的赋值可对结构体变量的成员逐个赋值,这种方式和数组相像,数组就是逐个元素逐一赋值,不同于数组,标准C中结构体变量可以整体赋值。结构体二维数组是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构,在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型的一类,结...

结构体变量赋值方法?
1按字符赋值。如结构体变量为a,成员为字符数组s[10];那么可以 for(i=0;i10;i++)a.s[i]=xxx;xxx可以是任意字符。比如getchar(),即从终端读取。2用strcpy赋值。如 strcpy(a.s,"test");就是将字符数组赋值为"test"。3用memcpy赋值。如 memcpy(a.s,"test2",3);就是将a.s的前三个字符...

结构体中的数组如何赋值
char name[NAME_SIZE];};\/\/ 定义2个结构体对象 A a1, a2;赋值方法 1. 利用库函数memcpy (头文件string.h), 可以对结构体对象整体赋值.memcpy(&a2, &a1, sizeof a2); \/\/ <=> a2 = a1 2. 对每个成员单独进行赋值 a2.val = a1.val;for (int i = 0; i < NAME_SIZE; ++i)a2...

如何给结构体数组赋值?
C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。例如:char a[10] = "123"; \/*正确,在定义的时候初始化*\/ char a[10];a = "123"; \/*错误,不能用“=”直接为字符...

如何对结构体中的数组进行一次性全部赋值?谢谢,比如就是这个意思 b.a...
1、在定义的时候初始化。2.把这个数组再放到一个内部结构体中,这样就可以一次性赋值。例如:struct { struct { int a[20];} aa;int c;} b,d;b.aa=d.aa\/\/将d中的a数组复制到b中的a数组。

C\/C++编程笔记:C语言结构体想要直接赋值,应该如何实现?
从结果可以看出,C语言中结构体的直接赋值是可行的。我们可以通过查看struct_assign()函数的汇编实现,从底层了解C语言是如何实现两个结构体之间的赋值操作的。这段汇编比较简单,由于结构体的对齐特性,sizeof(struct Foo)为16,通过四次movl操作将foo1的结构体内容拷贝到结构体foo2中。从汇编上可以看出...

c语言结构体中的一个char数组怎么赋值
st.name="123"; 非法,常量字符串不能直接赋值给字符数组,因为st.name 地址是确定的,不能再改了。 char name[10]="123";可以的,定义时,进行初始化字符数组。

C语言中怎么给一个结构体用scanf进行赋值?
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数 include <stdio.h> include <stdlib.h> struct student ...

相似回答