C语言数组初始化

C语言数组初始化转载博客代码编译运行环境:VS2017+Win32+Debug1.字符数组的初始化方式C语言中表示字符串有两种方式,数组和指针,字符数组是我们经常使用的方式。变量的定义包括指明变量所属类型、变量名称、分配空间以及初始化。可以看出,变量的初始化是变量定义的一部分。除了const变量需要显示初始化以外,其它变量如果在定义时未显示初始化,编译器会为变量以默认…

大家好,又见面了,我是你们的朋友全栈君。

转载至
这里

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


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

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

1.1逐个字符初始化

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

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

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

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

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

char str[]={
    
    "hello"};
   
   
   
  • 1

也可以省略花括号。

char str[10]="hello";
   
   
   
  • 1

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

char test1[256]="";
char test2[256]={
    
    ""};
char test3[256]={
    
    0};
char test3[256]={
    
    '\0'};
   
   
   
  • 1
  • 2
  • 3
  • 4

2.字符数组的赋值

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

char str[10];       //已经完成定义(包括编译器默认的初始化)
str={
    
    'a','d','s'};  //错误
str="abc";          //错误
str={
    
    0};            //错误
   
   
   
  • 1
  • 2
  • 3
  • 4

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

2.1逐个字符赋值

(1)for循环的方式。

char str[10];
for(int i=0;i<sizeof(str):++i)
    str[i]='\0';
   
   
   
  • 1
  • 2
  • 3

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

char str[10];
memset(str,0,sizeof(str));
   
   
   
  • 1
  • 2

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
  • 2
  • 3
  • 4
  • 5

参考文献

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161102.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库精华,出自 十步一杀的博客

    数据库精华,出自 十步一杀的博客SQLite3一列多行合并为一列一行分类: 数据库2013-06-2517:02 379人阅读 评论(0) 收藏 举报A  B         ———-      1  中  1  人    2  三2  天2  李变成:A  B——————-1  中,

    2022年7月27日
  • JEECG整合SpringSession

    JEECG整合SpringSession

    2021年6月16日
  • Latex中单引号,双引号「建议收藏」

    Latex中单引号,双引号「建议收藏」写论文时候,需要写出英文的单引号和双引号单引号就是”这个符号双引号的话,如果输入两个英文输入下的””,比如”paper”,LaTeX编译显示的话就是两个向下的引号。正确应该是第一个向上方向的引号用“这个符号,就是输入两个下图的键盘上的符号,所以正确应该为:“paper”…

    2022年6月25日
  • 自动生成测试用例_测试用例设计的完整过程

    自动生成测试用例_测试用例设计的完整过程前言写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。har2case我们先来了解一下另一个项目har2case他的工作原理就是将当前主流的抓

    2022年7月28日
  • cass9.1快捷键怎么设置_cass9.1格式刷快捷键命令

    cass9.1快捷键怎么设置_cass9.1格式刷快捷键命令在CAD操作中我们常用一些快捷键来代替鼠标操作从而提高绘图效率,以下是小编为大家整理的常用快捷键大全,涵盖图文版、文字版、键盘版。图文版:文字版:一、常用功能键F1:获取帮助F2:实现作图窗和文本窗口的切换F3:控制是否实现对象自动捕捉F4:数字化仪控制F5:等轴测平面切换F6:控制状态行上坐标的显示方式F7:栅格显示模式控制F8:正交模式控制F9:栅格捕捉模式控制F10:极轴模…

    2022年4月19日
  • Jmeter—正则表达式提取器:模板&匹配数字详解「建议收藏」

    Jmeter—正则表达式提取器:模板&匹配数字详解「建议收藏」目录一、相关理论1.正则表达式2.模板3.匹配数字二、例子1.【模板&匹配数字】2.【例-贪婪&非贪婪】3.【例-普通】一、相关理论1.正则表达式():要提取的内容.:匹配任意单个字符串*:匹配(之前的符号)0次或多次+:匹配(+之前的符号)1次或多次?:不要太贪婪,在找到第一个匹配项后停止。.:匹配连续0个/多个字符.+:匹配连续1个/多个字符\:转义,.表示匹配字符.本身2.模板表示取哪几个括号中的值若模板为:000,则为整个表达式匹配到的内容(这里为整个响

    2022年9月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号