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


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

C语言中表示字符串有两种方式,数组和指针,字符数组是我们经常使用的方式。变量的定义包括指明变量所属类型、变量名称、分配空间以及初始化。可以看出,变量的初始化是变量定义的一部分。除了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]C语言字符数组如何初始化?

字符数组的初始化与赋值相关推荐

  1. C语言中字符数组的初始化与赋值,字符串相关函数

    C语言中字符数组的初始化与赋值,字符串相关函数! 1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. (1)直接逐个初始化字符数组 ...

  2. C语言中字符数组的初始化与赋值

    1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. 字符数组初始化 char parr[] = "zifuchuansh ...

  3. C语言中字符数组的初始化与注意事项

    在C语言中字符数组的初始化有三种常见的方法: char a[5] = {'a','b','c','d','e'};char c[] = {'a','b','c','d','e'};char b[] = ...

  4. C语言字符数组的初始化

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

  5. java语言中类定义数组赋值_在Java语言中,下列对于字符数组的定义并赋值正确的是(选一项)_学小易找答案...

    [单选题]<茶花女--饮酒歌>这段音乐属于级进还是跳进的旋律? <茶花女-饮酒歌>.mp4 [简答题] [单选题]对外汉语教学中以系统讲授语言知识的一类课型,包括语音.词汇.语 ...

  6. 关于字符数组的初始化

    字符数组可以在定义时进行初始化.有两种初始化方法. 方法1:逐个字符赋给数组中各元素.这种方法最容易理解.例如: char c[5]={ 'H','a','p','p','y' }; 把5个字符分别赋 ...

  7. 字符数组的初始化及字符串的使用

    文章目录 字符数组的定义 字符数组初始化 字符串存放 '\0'的作用 字符数组的定义 同整型数组一样: 一维数组定义:char c[10]; 二维数组定义:char ch[3][4]; 字符数组初始化 ...

  8. 字符串,字符数组的初始化

    先上代码: #include<stdio.h>int main() {char* s1 = (char *)"aaaaa";// char * s2={'b','b', ...

  9. C语言之字符数组在if{}里面赋值给char *引发的问题

    1 问题 我的buff在if{}里面,然后对buff进行内存操作,最后赋值给char *类型的url,发现url最后没有得到数据 如下代码 #include <stdio.h> #defi ...

最新文章

  1. 【小知识】C、C++ 中const的实现机制
  2. 写出C语言中5种数据类型的名称及其关键字,求C语言中的32个关键字及其意思?...
  3. t30智能插座怎么设置_如何设置ConnectSense智能插座
  4. 计算机网络之网络层:10、IP组播、IGMP协议、组播路由选择协议
  5. 浏览器对象模型(BOM)
  6. 数据结构及算法之快速排序-python实现
  7. Dubbo 服务 IP 注册错误踩坑经历
  8. 快播(Qvod)也开始耍流氓了
  9. rs485数据线接反_rs485接口怎么接线?弱电人必学RS485接口基础知识讲解
  10. html5 调用摄像头 支持IE,ie调用不了摄像头 为什么电脑IE浏览器无法启动摄像头...
  11. 【CVPR2020】计算机视觉与模式识别会议论文完全清单_Part1
  12. windows server 2003忘记密码
  13. scrapy+python爬地图参照物应该有的坑及解决办法
  14. html在搜索栏中加入放大镜,CSS3 搜索条动画(放大镜图标展开为长方形输入框)...
  15. verilog驱动1602液晶屏
  16. Photoshop精讲精练笔记
  17. JavaScript每日一题 20170207
  18. ADsAD合辑(二)AD具体使用
  19. 解决mac idea2020打开闪退问题
  20. Python练手----字符串的密钥加密

热门文章

  1. 重磅签约!成都睿铂与成都航院共建数据处理联合实验室
  2. Node.js Express+Mongodb 项目实战
  3. RepBaseRepeatMaskerEdition下载 | RepeatMasker
  4. 如何确定恶意软件是否在自己的电脑中执行过?
  5. Activity实现 高亮显示活动节点,和所有已完成过的节点
  6. 实例化讲解 RunLoop
  7. 使用FileReader对象的readAsDataURL方法来读取图像文件
  8. 码农提高工作效率(转载)
  9. [Android开发]zip文件压缩解压缩
  10. IT销售素质 --善于学习