C语言字符串数组初始化应该注意什么,字符数组(C风格字符串)的初始化和赋值...

代码编译运行环境:VS2012+Win32+Debug

1.字符数组的初始化方式

变量的定义指的是:指明变量所属类型、变量名称、分配空间以及初始化其初始值的过程。可以看出,变量的初始化是变量的定义的一部分。除了const变量需要显示的初始化以外,如果变量定义的时候,不显示初始化,编译器会为变量以默认值进行初始化。变量的赋值和变量的初始化有着本质的区别,具体见我的另一篇博客:初始化那点小事。

1.1逐个字符初始化

当定义一个字符数组时,可以采用逐个字符初始化的方式:

char str[10]={ 'h','e','l','l','o'};

当显示指定的字符不足字符数组的长度时,编译器将剩余字符置为空字符’\0’。

1.2字符串常量来初始化字符数组

在c语言中,将字符串作为字符数组来处理。因此可以使用字符串来初始化字符数组。

char str[]={"hello"};

也可以省略花括号。

char str[10]="hello";

不及字符数组长度时,剩余字符置为空字符’\0’。

因此,我们不难得出,当为一个字符数组初始化为空字符数组的做法有如下几种:

char test1[256]="";

char test2[256]={""};

char test3[256]={0};

char test3[256]={'\0'};

2.字符数组的赋值

当为已经完成定义的字符数组赋值时,不能采用类似于初始化的方式为字符数组赋值了。如下语句是错误的:

char str[10];//已经完成定义(包括编译器默认的初始化)

str={'a','d','s'};//错误

str="abc";//错误

str={0};//错误

错误的原因是字符数组名代表字符数组的收地址,不可修改,不能作为左值。左值的概念见博客:认识左值与常引用。

2.1逐个字符赋值

(1)for循环的方式。

char str[10];

for(int i=0;i

str[i]='\0';

(2)使用memset()赋值,较for循环高效率,建议使用。当然为字符数组置空应该在初始化时完成,不应该再多次一举。

char str[10];

memset(str,0,sizeof(str));

2.2拷贝赋值

利用已有的字符串,通过memcpy,strcpy或者strncpy等函数实现拷贝赋值,参考代码如下:

char str[10];

char str2[]="hello";

memcpy(str,str2,sizeof(str2));

strcpy(str,str2);

strncpy(str,str2,strlen(str2)+1);

参考文献

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值