前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符数组的初始化与赋值

字符数组的初始化与赋值

作者头像
恋喵大鲤鱼
发布2018-08-03 17:21:00
7.1K0
发布2018-08-03 17:21:00
举报
文章被收录于专栏:C/C++基础

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


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

C语言中表示字符串有两种方式,数组和指针,字符数组是我们经常使用的方式。变量的定义包括指明变量所属类型、变量名称、分配空间以及初始化。可以看出,变量的初始化是变量定义的一部分。除了const变量需要显示初始化以外,其它变量如果在定义时未显示初始化,编译器会为变量以默认值进行初始化。变量的赋值和初始化有着本质的区别,字符数组也是如此,具体见我的另一篇博客:认识初始化

1.1逐个字符初始化

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

代码语言:javascript
复制
char str[10]={ 'h','e','l','l','o'};

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

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

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

代码语言:javascript
复制
char str[]={"hello"};

也可以省略花括号。

代码语言:javascript
复制
char str[10]="hello";

不及字符数组长度时,剩余字符置为空字符’\0’。因此,我们不难得出,当为一个字符数组初始化为空字符数组的做法有如下几种:

代码语言:javascript
复制
char test1[256]="";
char test2[256]={""};
char test3[256]={0};
char test3[256]={'\0'};

2.字符数组的赋值

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

代码语言:javascript
复制
char str[10];       //已经完成定义(包括编译器默认的初始化)
str={'a','d','s'};  //错误
str="abc";          //错误
str={0};            //错误

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

2.1逐个字符赋值

(1)for循环的方式。

代码语言:javascript
复制
char str[10];
for(int i=0;i<sizeof(str):++i)
    str[i]='\0';

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

代码语言:javascript
复制
char str[10];
memset(str,0,sizeof(str));

2.2拷贝赋值

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

代码语言:javascript
复制
char str[10];
char str2[]="hello";
memcpy(str,str2,sizeof(str2));
strcpy(str,str2);
strncpy(str,str2,strlen(str2)+1);

参考文献

[1]C语言字符数组如何初始化?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年09月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.字符数组的初始化方式
    • 1.1逐个字符初始化
      • 1.2字符串常量来初始化字符数组
      • 2.字符数组的赋值
        • 2.1逐个字符赋值
          • 2.2拷贝赋值
          • 参考文献
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档