精华内容
下载资源
问答
  • 对字符数组初始化正确的
    千次阅读
    2021-11-30 22:52:39

    好久没写Java了,练习leetcode的时候踩了好多坑,记录一下。
    初始化一维字符串数组有三种方法:

    1. String[] strs = new String[5]; //创建一个长度为5的String(字符串)型的一维数组
    2. String[] strs = new String[]{"","","","",""};
    3. String[] strs = {"","","","",""};

    String[] strs;
    strs = new String[] {“1”,“2”,“3”}; // 正确
    String[] strs;
    strs = {“1”,“2”,“3”}; //错误

    注意必须给出数组大小,而且不能[5]{""}只初始化一个字符串。
    如果不知道数组大小还想给字符串赋值为"",可以在for循环里面让strs[i] = “”。
    如果不在{}里面初始化,系统默认数组中所有字符串为null,这样你在添加字符的时候:
    strs[i] += ‘a’;
    结果是nulla。

    更多相关内容
  • 一、字符数组的定义和初始化 字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花...

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

    字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。

    charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'};

    即把10个字符分别赋给str[0]到str[9]10个元素

    如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\0')

    如char str[10] = {'\0'}; //结果里面元素全都为\0.其实这样赋值只是把第1个元素赋值为\0,后面的都默认用\0填充,如果是char str[10]={'1'};

    只有第一个为‘1’,后面都是\0。但千万不要以为写成char str[10];不赋值也可以。这样写里面的内容是乱的。

    这是细节,值得注意。

    所以我们最好每次想写char str[5]都写成

    char str[5]='\0';

    这样做最好。

    int a[10]={4,5};

    第一个赋值为4,第二个为5,后面的为0.如果直接int a[10]; 内容很乱。

    规律:用某个值给数组赋值,没有被赋值的元素会自动调用默认的构造函数,如char默认为\0,int默认为0.等等.

    二、字符数组与字符串

    在 c语言中,将字符串作为字符数组来处理。(c++中不是)

    在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,例如,

    定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0’代表。如果有一个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到第一个字符'\0'时,表示字符串结束,由它前面的字符组成字符串。

    系统对字符串常量也自动加一个'\0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'\0'是系统自动加上的。(通过 sizeof()函数可验证)

    了结束标志'\0'后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数组长度,如 char str[ ])

    说明:'\n’代表 ASCII 码为0的字符,从 ASCII码表中可以查到 ASCII 码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。

    对C 语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:

    注意sizeof与strlen的不同:

    char a[40]={'0'};

    printf("%d",sizeof(a));//开辟的数组的总大小40*1

    printf("%d",strlen(a));

    输出 40,1.

    char str[ ]={"I am happy"}; 可以省略花括号,如下所示

    char str[ ]="I am happy";

    注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,如:

    char d[5];

    d="hell";

    错误。vs2010提示表达式d必须是可修改的左值。

    这跟

    int a[5]={1,2,3};

    而不能

    int a[5];

    a={1,2,3}

    数组只能在初始化的时候一次性赋值,其他时候必须要一个一个赋值。

    看来数组名和指针是有区别的。

    下面的赋值方法是错误的

    char str[ ];

    str="I am happy";

    不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量"I am happy"的最后由系统自动加上一个'\0')

    因此,上面的初始化与下面的初始化等价

    char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};必须要人为加上一个\0,否则strlen不正确。

    而不与下面的等价

    char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};//strlen错误,后面没有\0

    前者的长度是11,后者的长度是10.

    说明:字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',向下面这样写是完全合法的。

    char str[5]={'C','h','i','n','a'};

    可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。

    、赋值方式

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

    char str[14];

    str="I love China"; (但在字符数组初始化时可以,即 charstr[14]="I love China";)

    而对字符指针变量,采用下面方法赋值:

    char* a;

    a="I love China";

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

    对字符指针变量赋初值(初始化):

    char* a="I love China";

    等价于:

    char* a

    a="I love China";

    而对于字符数组的初始化

    char str[14]="I love China";

    不能等价于:

    char str[14];

    str="I love China"; (这种不是初始化,而是赋值,而对数组这样赋值是不对的)

    转载C/C++编程笔记:C语言字符数组初始化,有些赋值方式千万注意! - 知乎

    展开全文
  • 1.首先定义结构体数组:typedef struct BleAndTspRmtCmd{char terminal[3];char note[3];char rmtCmd[10];char cmdPropt[24];};BleAndTspRmtCmd为结构体名,可以通过这个结构体名定义其他结构体变量,...

    1.首先定义结构体数组:

    typedef struct BleAndTspRmtCmd{

    char terminal[3];

    char note[3];

    char rmtCmd[10];

    char cmdPropt[24];

    };

    BleAndTspRmtCmd为结构体名,可以通过这个结构体名定义其他结构体变量,struct BleAndTspRmtCmd variable;

    或者定义结构体数组变量,struct BleAndTspRmtCmd variable[];

    2.或者定义全局结构体变量,

    typedef struct {

    char terminal[3];

    char note[3];

    char rmtCmd[10];

    char cmdPropt[24];

    }BleAndTspRmtCmd;

    然后根据这个结构体变量定义其他结构体变量,BleAndTspRmtCmd variable;或者数组变量BleAndTspRmtCmd variable[];

    3.初始化结构体方法:

    方法一:定义结构体数组变量的时候直接初始化(赋值),因为结构体内变量为字符数组,也就相当于字符串指针,这是字符数组的特殊性。

    struct BleAndTspRmtCmd myRmdCmdSet[28] = {{"XX", "XX", "XX", "XX"}, {"XX", "XX", "XX", "XX"}......}

    方法二:先定义结构体数组,后面再赋值。

    struct BleAndTspRmtCmd myRmdCmdSet[] = {NULL};

    这种赋值方式分两种,目前我已经验证成功的:

    先赋值临时变量;

    int index = 0;

    char node_temp[4] = "XX";

    char terminal_temp[4] = "XX";

    char rmtCmd_temp[11] = "XX";

    char cmdPropt_temp[24] = "XX";

    然后再将临时变量赋值给结构体数组变量,遍历:

    第一:strcpy,拷贝临时字符数组变量;

    for (; index < 28; index ++)

    {

    strcpy(myRmdCmdSet[index].terminal, terminal_temp);

    strcpy(myRmdCmdSet[index].note, node_temp);

    strcpy(myRmdCmdSet[index].rmtCmd, rmtCmd_temp);

    strcpy(myRmdCmdSet[index].cmdPropt, cmdPropt_temp);

    }

    第二:memcpy,与第一种类似,只是函数不一样;

    for (; index < 28; index ++)

    {

    memcpy(myRmdCmdSet[index].terminal, terminal_temp, sizeof(terminal_temp));

    memcpy(myRmdCmdSet[index].note, node_temp, sizeof(node_temp));

    memcpy(myRmdCmdSet[index].rmtCmd, rmtCmd_temp, sizeof(rmtCmd_temp));

    memcpy(myRmdCmdSet[index].cmdPropt, cmdPropt_temp, sizeof(cmdPropt_temp));

    }

    此时就完成了结构体数组变量的赋值。

    注意,由于结构体内的变量都是字符数组,相当于指针,他们都指向结构体对应的地址,输出时就会输出指向的地址开始的值,直到该结构体完。

    要想输出正确的值,printf必须进行截取和对齐。

    原样输出字符串:

    printf("%s", str);

    2. 输出指定长度的字符串, 超长时不截断, 不足时右对齐:

    printf("%Ns", str);             --N 为指定长度的10进制数值

    3. 输出指定长度的字符串, 超长时不截断, 不足时左对齐:

    printf("%-Ns", str);            --N 为指定长度的10进制数值

    4. 输出指定长度的字符串, 超长时截断, 不足时右对齐:

    printf("%N.Ms", str);           --N 为最终的字符串输出长度

    --M 为从参数字符串中取出的子串长度

    5. 输出指定长度的字符串, 超长时截断, 不足时左对齐是:

    printf("%-N.Ms", str);          --N 为最终的字符串输出长度

    --M 为从参数字符串中取出的子串长度

    展开全文
  • 字符数组初始化及字符串的使用

    千次阅读 2020-10-15 18:55:45
    文章目录字符数组的定义字符数组初始化字符串存放'\0'的作用 字符数组的定义 同整型数组一样: char c[10]; char ch[3][4]; 字符数组初始化 定义数组时初始化,如: char c[10]={'a','b','c','d'}; 如果输出格式为...

    字符数组的定义

    同整型数组一样:
    一维数组定义:char c[10];
    二维数组定义:char ch[3][4];

    字符数组初始化

    1. 定义数组时初始化,如: char c[10]={'a','b','c','d'};
      • 按每个字符元素输出时,
        • 输出格式为时printf("%d\t",c[i]);则会输出字符分别对应的ASCII码,后面用0补全;
        • 输出格式为时printf("%c\t",c[i]);则会输出a b c d四个字符,后面元素自动定为空字符(’\0’),输出结果如图:
          在这里插入图片描述
      • 作为整个字符输出时:printf("%s",ch);则输出abc。
      • 由于字符型数据是以整型数据形式(ASCII码)存放,所以也可以用整型数组来存放字符数据;int a[10]; a[0]='a';缺点:容易造成内存空间的浪费,因为一个整型数据占4个字节,一个字符型数据占1个字节。
    2. 仅定义数组char c[10];后没有对数组初始化,会输出不可预估的值;如果花括号中提供的字符个数>数组长度,则会出现语法错误;
    3. 可以不写数组长度: char c[]={'a','b','c','d'};数组长度即为大括号中的字符个数。可用printf("数组长度为:%d\n",sizeof(c));验证。
    4. 用字符串常量初始化字符数组 char c[]="i am A";末尾自动加’\0’,等同于char c[]={'i',' ','a','m',' ','A','\0'},也可以把大括号去掉char c[]={"i am A"};此时数组长度为7,最后一位是’\0’。
    5. C语言中数组名代表该数组的起始地址,所以不能在初始化后重新赋值。
      如:char str1[]=“china”; str1=str2;编译错误

    字符串存放

    C语言中没有字符串类型,也没有字符串变量,字符串是存放在字符型数组中的。C语言将字符串作为字符数组来处理

    1. 字符串结束标志—’\0’
      • C系统在字符数组中存放字符串常量时,会自动加一个’\0’作为结束符。如果将"i am A"字符串常量存入一维数组的话,占7个字节,最后一位是’\0’。
      • ‘‘\0’代表ASCII码为0的字符,是一个空操作符,只起一个标志作用。

    '\0’的作用

    表示字符串结束
    如:定义数组 char str1[]=“china”; 如果想用scanf(…)或者gets()对数组中的元素进行修改的话,如:

      char str1[]="china"; 
      scanf("%s",str1);
      //或gets(str1);
      puts(str1);
      /*
      for(int i=0;i<5;i++){
    		printf("%c\t",str1[i]);
    	}
    	*/
    

    最多可输入长度为6的字符串(包含’\0’),否则会报错;
    假设输入的字符串是"ww",用scanf或者gets函数时,会自动给输入的字符串末尾加一个’\0’;所以此时数组str1中存放的元素为: w w \0 n a \0

    • 用puts()输出和for循环遍历输出的结果是不一样的:
      • puts将第一个\0前的字符串输出,输出结果为 : w w;
      • for循环是将元素一一输出,输出结果为: w w \0(不输出) n a \0(不输出) ;
    • 如果将for循环中的循环条件i<5改为i<strlen(str1)后,跟puts的输出结果是一样的。说明strlen()计算字符数组长度也是计算到第一个’\0’结束。
    展开全文
  • 错误:初始化字符数组后打印出现错误。 原因:没有结束符。 解决: 1、char BDS_year[3]="21"; 2、char BDS_year[3]={‘2’,‘1’,‘\0’}; 3、char BDS_year[2]={'2','1'}; 1和2是正确的,3会出错。
  • C语言中字符数组初始化的几种方法

    千次阅读 2022-03-05 16:21:01
    1.C语言中的字符数组初始化 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。 1.1 直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符...
  • 字符数组初始化方式变量的定义指的是:指明变量所属类型、变量名称、分配空间以及初始化其初始值的过程。可以看出,变量的初始化是变量的定义的一部分。除了const变量需要显示的初始化以外,如果变量定义的时候,...
  • C语言中字符数组初始化与赋值,字符串相关函数

    万次阅读 多人点赞 2018-09-23 20:56:37
    1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。 (1)直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符赋给...
  • Java字符数组初始化和赋值

    万次阅读 2017-04-29 09:10:37
    原文地址:...//一维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","","","",""}; String[] str = {"","","","
  • 字符数组可以在定义时进行初始化.有两种初始化方法. 方法1:逐个字符赋给数组中各元素.这种方法最容易理解.例如: char c[5]={ 'H','a','p','p','y' }; 把5个字符分别赋给c[0]至c[4].以下是几点说明: (1) ...
  • 有几种错误的初始化方法要注意:char str[3] = {"abc", " ", " "}; error : excess elements in char array initializer char str[3] = "abc"; char str[3] = {"abc"}; 这两种不会提示错误,但输出时会乱码。 ...
  • C语言的二维数组初始化的几种方式介绍1、直接赋值2、循环每个元素赋值3、借用memset/memset_s初始化为0或-14、`数组所有元素初始化为相同值` 1、直接赋值 适合数组元素较少的,各元素的值可以不同。 int[2][3] arr...
  • (1)什么是字符数组字符数组是指用来存放字符数据的数组。其定义的一般形式为: char 数组名[数据长度] 。字符数组用于存放字符或字符串,...(2)关于字符数组初始化 直接逐个初始化字符数组: char ch[11...
  • //一维数组String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组String[] str = ...String数组初始化区别首先应该明白java数组里面存的是对象的引用,所以必须初始化才能用;String[] str ...
  • 不只是数组,在使用任何变量之前,都应该变量进行初始化,这是一个编程的好习惯,可以有效避免许多由于垃圾值导致的bug。于是我回过脸去,不再理会。小易同学等了许久也不见我回答,很诚恳的说道,“不知道罢?我...
  • 一、字符数组的定义和初始化字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中...
  • 字符串与字符数组初始化及长度计算:  方式一:char a[]="hello";系统自动在末尾补'\0',sizeof的结果为6,strlen的结果为5;  方式二:char a[]={'h','e','l','l','o'}; 末尾不补'\0',sizeof的结果为5,...
  • C语言的数组初始化

    千次阅读 2021-01-16 13:44:57
    这是非常基础的东西,但基础的重要性不言而喻,我敢肯定这个知识点我肯定以前了解过,但如今,我不敢确定,由此可见纪录的重要性,这世界没有什么捷径,找方向,然后不停反复.所以从今天開始,我会比較具体的纪录这些比較小...
  • 1. 数组初始化,可以只给一部分元素赋值 int a[10] = {0,1,2,3,4}; 这样只给前面5个元素赋值,后5个元素为0; 将char p[8]看成字符数组的话,char p[8] = [0]; 表示第一个元素为0,后面7个元素也为0;所以char p...
  • C语言中字符数组初始化与赋值

    万次阅读 多人点赞 2016-09-22 14:28:58
    C语言中字符串的初始化赋值及其他操作
  • 二维数组初始化

    2021-07-29 20:24:02
    3.数组初始化 ​ 静态初始化:数据由程序员指定,长度由系统自动分配 ​ 动态初始化:长度由程序员指定,数据由系统赋默认值 ​ 整数类型:0 * 浮点类型:0.0 * 字符类型:’ ’ * 布尔类型:...
  • java二维数组初始化的三种方式

    千次阅读 2019-07-30 17:16:10
    下面主要介绍下二位数组初始化的三种方式 1、定义数组的同时使用大括号直接赋值,适合数组元素已知的情况 2、定义二维数组的大小,然后分别赋值 3、数组第二维的长度可变化 //第一种方式:定义的同时大括号...
  • C语言中,数组初始化的方式主要有三种:1、声明时,使用 {0} 初始化;2、使用memset;3、用for循环赋值。那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码:[cpp]view plaincopy#defineARRAY_SIZE_MAX(1*...
  • 下表比较了两种不同的方式来初始化字符数组:for循环和memeset()。随着初始化数据量的增加,memset()很清晰的做的更快: 耗时for循环memset10000.0160.017100000.0550.0131000000.4430.02910000004.3370.291 ...
  • java数组 初始化_用Java初始化数组

    千次阅读 2020-07-14 21:45:19
    java数组 初始化 具有使用C或FORTRAN等语言进行编程的经验的人熟悉数组的概念。 它们基本上是一个连续的内存块,每个位置都是某种类型:整数,浮点数或您所拥有的。 Java中的情况与此类似,但有一些额外的折痕。 ...
  • 数组初始化; int [] arr={1,2,3,4} int [] arr=new int[]{1,2,3,4} 查看数组⻓度; arr.length; for each循环; for(int a:arr){ System.out.println(a); 数组拷⻉; int [] arr2=arr1; int[] arr2=Arrays...
  • 1.字符数组初始化在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。(1)直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,346
精华内容 83,738
热门标签
关键字:

对字符数组初始化正确的