字符数组(C风格字符串)的初始化和赋值
2015-09-09 17:10
357 查看
代码编译运行环境:VS2012+Win32+Debug
当显示指定的字符不足字符数组的长度时,编译器将剩余字符置为空字符’\0’。
也可以省略花括号。
不及字符数组长度时,剩余字符置为空字符’\0’。
因此,我们不难得出,当为一个字符数组初始化为空字符数组的做法有如下几种:
错误的原因是字符数组名代表字符数组的收地址,不可修改,不能作为左值。左值的概念见博客:认识左值与常引用。
(2)使用memset()赋值,较for循环高效率,建议使用。当然为字符数组置空应该在初始化时完成,不应该再多次一举。
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<sizeof(str):++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]http://zhidao.baidu.com/link?url=-JtDkltgdKGMVW2nwczHOC2SDEVZM87VxRAfgixrGA4TLGyQWivQMNCHg65nbCwSK2ZifyaIkSfcKEpfyEWLrq相关文章推荐
- LeetCode 13_Roman to Integer
- linux多线程学习
- Mysql分表的三种方法
- Android遥控器开发
- RoundImageView用ImageLoader加载时出现ANR问题解决。
- 字符数组(C风格字符串)的初始化和赋值
- 关于NavigationController push方法卡顿的问题
- 0909 对编译原理见解
- pcntl研究
- 0909 关于编译原理
- 0909 关于编译原理
- Spring+MyBatis多数据源配置实现
- spring 注入简单模拟
- HDU 1323 Perfection (水题)
- PMI-ACP敏捷认证:敏捷开发的6个实战经验
- ZBar扫码
- [leetcode-214]Shortest Palindrome(java)
- iOS,关于真机tableViewCell上面button响应事件,不同版本崩溃问题解决
- JAVA嵌入运行Groovy脚本
- Thrift学习笔记