精华内容
下载资源
问答
  • C语言中字符数组初始化的几种方法

    万次阅读 多人点赞 2019-04-14 16:39:30
    1.C语言中的字符数组初始化 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。 1.1 直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个...

    欢迎关注我的微信公众号:CurryCoder的程序人生

    在这里插入图片描述

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

    • 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。
    • 1.1 直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。
          char strr[] = {'I',' ','a','m',' ','h','a','p','p','y'};
      
    • 注意:如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即’\0’)
    • 1.2 用字符串常量来初始化字符数组:在c语言中,将字符串作为字符数组来处理。因此可以使用字符串来初始化字符数组
          char str[] = {"I am happy"};
          // 也可以去掉{}
          char str[] = "I am happy";
      
    • 注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的。
          char str[];
          str = "I am happy";  //错误,字符数组的赋值只能按元素一一赋值(错误的原因: C语言并没有提供可以直接操作字符串的运算符;“=”可以用于其他数据类型的赋值,但是不可以直接给字符串赋值
      
    • 这是字符数组初始化的两种方式,但是这两种方式其实是不等价的;它们的数组长度不同.
          #include "iostream"
          #include "cstring"
      
      
          using namespace std;
      
      
      
          int main(){
              /*字符数组初始化*/
              // 第一种初始化的方法
              char str[10] = {'I',' ','a','m',' ','h','a','p','p','y'};  // 少了\0,输出会出现问题
              cout << "str=" << str << ",sizeof(str)=" << sizeof(str) << endl;
              // 第二种初始化的方法
              char str1[] = "I am happy";  // 等价于char str1[] = {"I am happy"};
              char str2[] = "python";
              // char str2[] = {'p', 'y', 't','h','o','n'}与char str2[] = "python"不等价
              // char str2[] = {'p', 'y', 't','h','o','n', '\0'}与char str2="python"等价
              char str3[] = {'p', 'y', 't','h','o','n'};
              char str4[] = {'p', 'y', 't','h','o','n', '\0'};
              
              int num_str2 = sizeof(str2);
              int num_str3 = sizeof(str3);
              int num_str4 = sizeof(str4);
              
              cout << "str2与str3不等价\n";
              cout << "str2 = " << str2 << ",sizeof(str2) = " << num_str2 << endl;
              cout << "str3 = " << str3 << ",sizeof(str3) = " << num_str3 << endl;
              cout << "str2与str4等价\n";
              cout << "str2 = " << str2 << ",sizeof(str2) = " << num_str2 << endl;
              cout << "str4 = " << str4 << ",sizeof(str4) = " << num_str4 << endl;
              return 0;
          }
      
    • 1.3 字符指针:在C语言中我们也可以使用字符指针来存储字符串
    • 字符指针初始化:
          char *str = "python";
      
    • C语言对字符串常量是按照字符数组来处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时,只是把字符串首地址赋值给str。 输出:
          cout << str << endl;
      
    • 系统首先输出str指向的字符,而后自加1,直至遇到’\0’;与数组的输出方式相同。字符指针的赋值:
          char *str;
          str = "python";  // 对于字符指针这种赋值方式是正确的,与字符数组不同
      

    2.总结

    • 在C语言中并没有直接提供字符串的操作,其字符串操作是通过转化为字符串完成的,例如字符数组,字符指针,其本质是对字符的操作。
    • 作为字符数组,与普通数组相同,区别在于它的每一个元素是一个字符,所以不可以直接用“=”对字符数组赋值(parr[]=”python”,是错误的赋值方式),但是可以对每一个元素进行赋值(charr[12]=’\0’是正确的)。
    • 字符串一定是以’\0’结尾的;字符数组和字符指针我们当做字符串整体初始化,系统会自动添加’\0’;对于字符数组,如果采用单个字符的方式进行初始化或者赋值一定要考虑结束符’\0’.

    3.参考博客

    展开全文
  • 字符数组初始化问题

    千次阅读 2018-01-08 13:29:24
    在C语言编程中,当我们声明一个字符数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式: (1) char a[10]=""; (2) char a[10]={'\0'}; (3) char a[10]; str[0]='\0'; 第1,2种方式是将a数组的所有...

    在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:

    • (1) char a[10]="";
    • (2) char a[10]={'\0'};
    • (3) char a[10]; str[0]='\0';

    第1,2种方式是将a数组的所有元素都初始化为'\0',而第3种方式是只将str数组的第一个元素初始化为'\0'。如果数组的size非常大,那么前两种方式将会造成很大的开销。

    所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第3种方式来初始化字符串数组。

    几个错误的实例

     int arrayl[5]={1,2,3,4,5,6}; //error-初始化值个数多于数组元素个数

    2     int array2[5]={1,,2,3,4}; //error:初始化值不能省略
    3     int array3[5]={1,2,3,}; //error:初始化值不能省略
    4     int array4[5]={}; //error:语法格式错误

    初始化值的个数可少于数组元素个数。当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组)。

    2.初始化字符数组


      初始化字符数组有两种方法,一种是:
        char array[10]={"hello"};
      另一种是:
        char array[10]={'h','e','l','l','\0'}
      第一种方法用途较广,初始化时,系统自动在数组没有填值的位置用,'\0'补上。另外, 这种方法中的花括号可以省略,即能表示成:
        char array[10]="hello";
      第二种方法一次一个元素地初始化数组,如同初始化整型数组。这种方法通常用于输入不容易在键盘上生成的那些不可见字符。
      例如,下面的代码中初始化值为若干制表符:
        char chArray[5]={'\t','\t','\t','\t','\0');
      这里不要忘记为最后的,'\0'分配空间。如果要初始化一个字符串"hello",那为它定义的数组至少有6个数组元素。
      例如,下面的代码给数组初始化,但会引起不可预料的错误:
        char array[5]="hello";
      该代码不会引起编译错误,但由于改写了数组空间以外的内存单元,所以是危险的。

    展开全文
  • 字符串与字符数组初始化及长度计算:  方式一:char a[]="hello";系统自动在末尾补'\0',sizeof的结果为6,strlen的结果为5;  方式二:char a[]={'h','e','l','l','o'}; 末尾不补'\0',sizeof的结果为5,...

    字符串与字符数组初始化及长度计算:

      方式一:char a[]="hello";系统自动在末尾补'\0',sizeof的结果为6,strlen的结果为5;


      方式二:char a[]={'h','e','l','l','o'}; 末尾不补'\0',sizeof的结果为5,strlen的结果为                        19(不正确的原因为strlen运行时遇到'\0'结束,而a中并没有'\0');

      方式三:char *p="hello",方式一和方式二都是字符数组的定义,方式三是字符串的定                  义,p是指向字符串常量"hello"的常量指针,指针指向位置的字符不能改变,                   sizeof的结果为4(是指针本身占空间的大小,与所指字符串无关),strlen的                 结果为5,末尾自动补'\0';


    sizeof:  运算符,在编译时执行,计算初始化时的大小(最大容量),包括'\0'位在内,              不能计算动态分配空间的大小。

    strlen : 计算字符串或字符数组中有内容字符个数的函数,遇到'\0'结束运算,不把'\0'位计算在内,不能用于没有'\0'的字符数组。


    本人初学者,还请各位批评指正。


    展开全文
  • 正确格式1 unsigned char default_environment[0x4000] =  { "bootargs=" "root=/dev rootfstype=yaffs2" "\0" "bootcmd=" "movi read ...编译后,字符串之间的空格会被去掉,而字符串里面的空格会被保留 正确格式2

    正确格式1

    unsigned char default_environment[0x4000] = 

    {
    "bootargs=" "root=/dev rootfstype=yaffs2""\0"
    "bootcmd=" "movi read kernel 30008000;""\0"

    };

    编译后,字符串之间的空格会被去掉,而字符串里面的空格会被保留

    编译器其实把这个字符数组里面的内容整合成一个字符串,所以字符串之间不能加,


    正确格式2

    unsigned char default_environment[0x4000] = {'c','b','d'};


    下面举例说下2种错误格式:

    unsigned char default_environment[0x4000] = 
    {
    "bootargs=", "root=/dev rootfstype=yaffs2","\0"
    "bootcmd=", "movi read kernel 30008000;","\0"
    };


    unsigned char default_environment[0x4000] = {'c' 'b' 'd'};

    展开全文
  • #include #include int main() { char ar0[] = {'n','a','m','e','i','s','l'};... //初始化字符数组方式2.这里是一个初始化列表,不是字符串常量,以后可以修改其值 char *ar2 = "NAMEISL"; //字符串常量.A
  • 1.首先定义结构体数组: typedef struct BleAndTspRmtCmd{ char terminal[3]; char note[3]; char rmtCmd[10]; char cmdPropt[24];}; BleAndTspRmtCmd为结构体名,可以通过这个结构体名定义其他结构体变量,...
  • 有几种错误的初始化方法要注意:char str[3] = {"abc", " ", " "}; error : excess elements in char array initializer char str[3] = "abc"; char str[3] = {"abc"}; 这两种不会提示错误,但输出时会乱码。 ...
  • 1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。 (1)直接逐个初始化字符数组:字符数组的初始化,最容易理解的方式就是逐个字符赋给...
  • java字符数组初始化和赋值

    万次阅读 多人点赞 2015-04-20 23:20:14
    //一维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","",...String数组初始化区别  首先应该明白java数组里面存的是对象的引用,所以必须初
  • 一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};...5.2.1 数组初始化 数组可以用一个列值来初始化,例如 int v1[] ={1,2,3,4}; char v2[]={'a','b','c',0}; 当数组定义时没
  • 转载:http://blog.csdn.net/u011028771/article/details/526227211.字符数组初始化在C语言中,字符串是...字符数组初始化char parr[] = "zifuchuanshuzu"; char charr[] = { 'z','i','f','u','c','h','u...
  • Java字符数组初始化和赋值

    万次阅读 2017-04-29 09:10:37
    原文地址:...//一维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","","","",""}; String[] str = {"","","","
  • 一、字符数组的定义和初始化 字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。 charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花...
  • (1)什么是字符数组字符数组是指用来存放字符数据的数组。其定义的一般形式为: char 数组名[数据长度] 。字符数组用于存放字符或字符串,...(2)关于字符数组初始化 直接逐个初始化字符数组: char ch[11...
  • 字符数组在定义的时候最好要初始化。  2 字符数组初始化时,可以用2种形式。 第一种字符数组初始化 [cpp] view plaincopy char a1[4]="abc";  第二种字符数组...
  • C语言数组初始化

    千次阅读 2019-01-13 23:23:20
    C语言数组初始化 wchar_t wname[128]={0}; char cname[256]={0}; 我感兴趣的是: 1. 这种赋值的结果。 2. 这种形式是否符合标准编码规则? 我找到了如下资料,可能有助于这个知识点的掌握。 /*初始化值的...
  • 含义是先新建一个字符串,内容是abcd 然后str1是一个头指针,指向这个串. 但是这个新建串是作为const存在的,并不是一个可以编辑的变量,因此,一旦你想更改其中的值,程序就会出错。根据定义:指向常量字符串的指针不能...
  • 参考博客:... (1)char a[]={"Hello"};//按字符初始化,大小为6. (2)char b[]={'H','e','l','l'};//按字符初始化(错误,输出时将会乱码,没有结束符) (3)char c[]={'H','e','l','l','o','...
  • 字符指针与字符数组初始化

    千次阅读 2018-04-30 15:41:10
    #include&lt;stdlib.h&gt;#include&lt;stdio.h&gt;int main(){ char *p="hello"; char c[10]="hello"; puts(p); puts(c); c[0]='H'; //p[0]='H';...world&quo
  • CHAR数组初始化

    千次阅读 2014-11-23 14:59:15
    CHAR数组初始化 一般的数组初始化,也就是申请数组的时候我们就初始化。 1. char buffer[1000] = {0}; //一般的话,我们只将数组初始化为0,然后再使用。C++中编译器会把第一个初始化值赋给数组的第一个元素,然后...
  • String数组初始化

    2015-07-14 11:30:20
    现将所理解的String数组在此进行说明,并String数组初始化进行分析。 //一维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","","","",...
  • printf("请按照要求正确输入!\n"); } while(getchar() != '\n'); } void show_nes(struct nes * st) { printf("%d %s\n", st->num, st->name); } [此贴子已经被作者于2007-11-9 0:20:37编辑过]
  • java数组 初始化_用Java初始化数组

    千次阅读 2020-07-14 21:45:19
    java数组 初始化 具有使用C或FORTRAN等语言进行编程的经验的人熟悉数组的概念。 它们基本上是一个连续的内存块,每个位置都是某种类型:整数,浮点数或您所拥有的。 Java中的情况与此类似,但有一些额外的折痕。 ...
  • 【转】字符数组初始化0 与memset 0 效率的分析 最近要分析程序的性能,所以上网查了查资料,的处理下面结论: #defineARRAYSIZE 2048 voidmain() {   chararrayA[ARRAYSIZE]={0};   chararrayB[ARRAYSIZE];...
  • C++字符数组 定义和初始化 赋值和引用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 186,560
精华内容 74,624
关键字:

对字符数组初始化正确的