c语言结构体中的一个char数组怎么赋值?

这是我写的structstudent{intx;charname[10];};voidmain(){studentst;st。name=这里能不能直接赋值一个字符串“12... 这是我写的
struct student
{
int x;
char name[10];
};
void main()
{
student st;
st。name= 这里能不能直接赋值 一个字符串 “123”;? 如果不用scranf()
}
展开
 我来答
问明6E
高粉答主

2019-06-19 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:13万
展开全部

(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

参考资料:

百度百科——字符数组

White_MouseYBZ
推荐于2018-02-27 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6662万
展开全部

常用两种措施:

  1. 在声明结构体变量时初始化,如——

    //#include "stdafx.h"//If the vc++6.0, with this line.
    #include "stdio.h"
    struct stu{
        int x;
        char name[10];
    };
    int main(void){
        struct stu s={8,"123"};//这样初始化
        printf("%d %s\n",s.x,s.name);
        return 0;
    }
  2. 向数组里直接拷贝字符串,如——

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
struct stu{
    int x;
    char name[10];
};
int main(void){
    struct stu s;
    strcpy(s.name,"abcd");//向name拷贝字符串
    s.x=128;
    printf("%d %s\n",s.x,s.name);
    return 0;
}



本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
用电知识分享
推荐于2017-11-25 · TA获得超过1831个赞
知道小有建树答主
回答量:841
采纳率:69%
帮助的人:267万
展开全部
st.name="123"; 非法,常量字符串不能直接赋值给字符数组,因为st.name 地址是确定的,不能再改了。 char name[10]="123";可以的,定义时,进行初始化字符数组。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叁生万物
2015-10-08 · TA获得超过6259个赞
知道小有建树答主
回答量:2871
采纳率:41%
帮助的人:1027万
展开全部
st.name="123"; 非法,常量字符串不能直接赋值给字符数组,因为st.name 地址是确定的,不能再改了。 char name[10]="123";可以的,定义时,进行初始化字符数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无名人氏一个
2015-09-13 · TA获得超过126个赞
知道答主
回答量:78
采纳率:100%
帮助的人:53.2万
展开全部
好吧,比如:
struct emu={
int i;
char ch[50];}
那么对char ch赋值可以
for(j=0;j<=49;j++) emu.ch[j]=j;
或者一个字符一个字符的赋值,比如emu.ch[0]='a';
对字符串的赋值不能直接等于,要用函数strcpy,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式