热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c语言字符数组初始化为全0,c语言二维字符数组初始化为0

1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。系统对字符串常量也自动加一个\0作为结束符。例如CProgram”共有9个字符,但


1、字符数组的定义和初始化


初始化字符数组是最容易理解的方法,就是逐字符分配给数组中的每个元素。 char str[10]={ 'I '、'、'、'、' a '、'、' m '、'、'、' h '、' a '、' p '、' p '、'、' y'}; 也就是说,将10个字符分别分配给从str[0]到str[0]的10个要素


如果大括号中指定的字符数大于数组的长度,则会将其作为语法错误处理。 如果小于数组的长度,则只考虑这些字符数组中的上一个元素,其馀元素自动为空字符“\0”。


2、字符数组和字符串


在c语言中,字符串被视为字符数组。 在实际应用中(不是(c ) ),有效字符串的长度而不是字符数组的长度备受关注。 例如,将字符数组的长度定义为100,实际有效字符只有40个。 为了测量字符串的实际长度,在c语言中确定了用字符“\0”表示的“字符串结束标志”。 如果有字符串,其中第10个字符为“\0”,则此字符串的有效字符为9个。 这意味着遇到第一个字符“\0”时,字符串将结束,并且字符串由前一个字符组成。


字符串常量也会自动添加“\0”作为结束符。 例如," C Program "为9个字符,但内存中有10个字节,最后一个字节"\0 "将自动添加。 (sizeof ) (可通过函数验证) ) ) ) ) )。


有了结束标志“\0”,字符数组的长度并不重要,经常通过检测“\0”的位置来确定字符串是否结束,而不是由数组的长度决定字符串的长度。 当然,定义字符数组时,必须估计实际字符串的长度,以便数组的长度始终大于字符串的实际长度。 (在实际的字符串定义中,经常没有指定数组的长度,如char str[ ]。 (0表示ASCII代码为0的字符,ASCII代码为0的字符不是可显示的字符,而是“空运算符”,表示不执行任何操作。 将其用作字符串结束标志不会导致额外的操作或添加任何有效字符,而是只提供一个标识。


综上所述,了解如何用c语言处理字符串后,可以通过向初始化字符数组添加另一种方法——,用字符串常量初始化字符数组。


char str[ ]={'I am happy'}; 大括号可以省略如下


char str[ ]='I am happy '; 3358www.Sina.com/:以上字符数组的整体赋值仅适用于字符数组注意。 不能用于字符数组的3358www.Sina.com/只能为字符数组的每个元素分配一个赋值。 以下赋值方法是错误的


char str[ ]; str='I am happy '; //错误的是,字符数组的赋值只能按元素进行赋值。 使用字符串(请注意,字符串的两端用双引号“”而不是单引号“”括起来),而不是使用单个字符作为初始值。 显然,这种方法更直观、更方便。 (注意:数组str的长度是11而不是10。 请注意,“\0”会自动添加到字符串常量“I am happy”的末尾。)


因此,上面的初始化等效于下面的初始化


char str[ ]={'I ','、'、'、' a '、' m '、'、' h '、' a '、' p '、' y '、'\0'}; 不等效于下面的东西


char str[ ]={'I ',',',' a ',' m ',',' h ',' a ',' p ',' p ',' y'}; 前者的长度是11,后者的长度是10。


初始化:字符数组中的最后一个字符不必为“\0”。 不包含“\0”也可以。 像以下这样写是完全合法的。


char str[5]={'C ',' h ',' I ',' n ',' a'}; 如果用两种不同的方法初始化字符数组,则可以看到得到的数组的长度不同。


#includestdio.hvoidmain(void ) charC1 )=(I )、)、a )、m )、h )、a )、p )、y )。 char c2[]='I am happy '; intI1=sizeof(C1 ); intI2=sizeof(C2; printf(%d(n ),i1 ); printf(%d(n ),i2 ); 结果: 10 11


3、字符串的表示形式


在c语言中,可以用两种方式表示和存储字符串。


(1)用字符数组存储字符串


char str[ ]='I love China '; )2)用字符指针指向字符串


char* str='I love China '; 在第二种表示方式中,有人认为str是字符串变量。 在定义时将字符串常量' I love China '直接指派给该字符串变量是错误的。 C语言按字符数组处理字符串常数,打开了用于在存储器中存储字符串常数的字符数组。 程序在定义字符串指针变量str时,只需将字符串的起始地址,即存储字符串的字符数组的起始地址分配给str。


使用这两种表示形式的字符串输出


printf(%s(n ),str ); %s表示输出字符串,并提供字符指针变量名st

r(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使str 自动加1,使之指向下一个字符,如此,直到遇到字符串结束标识符" \0 "。
4、对使用字符指针变量和字符数组两种方法表示字符串的讨论
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈。

4.1、字符数组由若干个元素组成,每个元素放一个字符;而字符指针变量中存放的是地址(字符串/字符数组的首地址),绝不是将字符串放到字符指针变量中(是字符串首地址)

4.2、赋值方式:
对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值

char str[14];str="I love China"; //错误,不是初始化,这是赋值,只能一一进行。

(但在字符数组初始化时可以,即char str[14]="I love China";)
而对字符指针变量,采用下面方法赋值:

char* a;a="I love China";//指针赋值,可以

或者是char* a="I love China"; 都可以

4.3、对字符指针变量赋初值(初始化):
char* a="I love China";
等价于:
char* a;
a="I love China";
而对于字符数组的初始化
char str[14]="I love China";
不能等价于:
char str[14];
str="I love China"; (这种不是初始化,而是赋值,而对数组这样赋值是不对的)
4.4、如果定义了一个字符数组,那么它有确定的内存地址,不能进行多次赋值;而定义一个字符指针变量时,它并未指向某个确定的字符数据,并且可以多次赋值。
5、字符串处理函数

5.1 字符串连接

char *strcat(char *str1,const char *2 );char *strcat(char *strDestination,const char *strSource );

功能:函数将字符串str2 连接到str1的末端,并返回指针str1
注:连接前两个字符串的后面都有一个' \0 ',连接时将字符串1后面的' \0 ‘去掉,只在新串最后保留一个' \0 ‘

5.2 字符串复制

char *strcpy(char *str1,const char *2 );char *strcpy(char *strDestination,const char *strSource );

功能:复制字符串strSource 中的字符到字符串strDestination,包括空值结束符。返回值为指针strDestination。

注:

     1、“字符数组1”必须写成数组名形式,“字符串2"可以是字符数组名,也可以是一个字符串常量
     2、复制时连同字符串后面的' \0 ' 一起复制到数组1中
     3、不能用赋值语句直接将一个字符串常量或者字符数组直接赋给一个字符数组(同普通变量数组是一样的),而只能用strcpy 函数处理。
     4、可以用strcpy 函数将字符串2中的前若干个字符复制到字符数组1中去。

168飞艇6种不亏钱的方法二者之间是有区别的,不应混为一谈。

4.1、字符数组由若干个元素组成,每个元素放一个字符;而字符指针变量中存放的是地址(字符串/字符数组的首地址),绝不是将字符串放到字符指针变量中(是字符串首地址)

4.2、赋值方式:
对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值

char str[14];str="I love China"; //错误,不是初始化,这是赋值,只能一一进行。

(但在字符数组初始化时可以,即char str[14]="I love China";)
而对字符指针变量,采用下面方法赋值:

char* a;a="I love China";//指针赋值,可以

或者是char* a="I love China"; 都可以

4.3、对字符指针变量赋初值(初始化):
char* a="I love China";
等价于:
char* a;
a="I love China";
而对于字符数组的初始化
char str[14]="I love China";
不能等价于:
char str[14];
str="I love China"; (这种不是初始化,而是赋值,而对数组这样赋值是不对的)
4.4、如果定义了一个字符数组,那么它有确定的内存地址,不能进行多次赋值;而定义一个字符指针变量时,它并未指向某个确定的字符数据,并且可以多次赋值。
5、字符串处理函数

5.1 字符串连接

char *strcat(char *str1,const char *2 );char *strcat(char *strDestination,const char *strSource );

功能:函数将字符串str2 连接到str1的末端,并返回指针str1
注:连接前两个字符串的后面都有一个' \0 ',连接时将字符串1后面的' \0 ‘去掉,只在新串最后保留一个' \0 ‘

5.2 字符串复制

char *strcpy(char *str1,const char *2 );char *strcpy(char *strDestination,const char *strSource );

功能:复制字符串strSource 中的字符到字符串strDestination,包括空值结束符。返回值为指针strDestination。

注:

     1、“字符数组1”必须写成数组名形式,“字符串2"可以是字符数组名,也可以是一个字符串常量
     2、复制时连同字符串后面的' \0 ' 一起复制到数组1中
     3、不能用赋值语句直接将一个字符串常量或者字符数组直接赋给一个字符数组(同普通变量数组是一样的),而只能用strcpy 函数处理。
     4、可以用strcpy 函数将字符串2中的前若干个字符复制到字符数组1中去。


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
author-avatar
lixinleslee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有