精华内容
下载资源
问答
  • 字符串数组初始化

    2021-01-30 20:43:14
    int main(int argc, const char *argv[]) { char *strs[] = {"dog","racecar","car"}; printf("%s\n", strs[1]); int len = strlen(strs[1]); printf("len = %d", len); return 0;...记住这种初始化方式。
    int main(int argc, const char *argv[])
    {   
        char *strs[] = {"dog","racecar","car"};
    
        printf("%s\n", strs[1]);
        int len = strlen(strs[1]);
        printf("len = %d", len);
    
        return 0;
    }
    
    /*
    > Executing task: .\bin\demon.exe <
    
    racecar
    len = 7
    终端将被任务重用,按任意键关闭。
    */

    代码如上。。记住这种初始化方式。

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

    2009-12-25 20:16:00
     初始化字符串数组时,编译器自动将字符串最后一个字符后面加上/0,以表示字符串的结束。如果数组的大小大于字符串的长度+1,那么把字符串结束后面的元素也都初始化为/0; 看这段程序:定义一个大小为12的字符串数组...

    (1)char arr[10]="HI";
        初始化字符串数组时,编译器自动将字符串最后一个字符后面加上'/0',以表示字符串的结束。
    如果数组的大小大于字符串的长度+1,那么把字符串结束后面的元素也都初始化为'/0';
    看这段程序:
    定义一个大小为12的字符串数组
    char str1[12]="jiajia";        
    让一个char型的指针指向这个数组
        char *p1=str1;
    输出这个字符串
        printf("%s/n/n",str1);
    利用指针输出这个字符串数组中每个元素的字符、字符ascii值、字符存储地址
        for(int i=0;i<12;i++)
        {
            printf("%c:%d:%p/n",*p1,*p1,p1);
            p1++;
        }
    可以看出,数组元素的后几位都被初始化成了'/0';使用printf打印字符串数组时,程序遇到第一个'/0'就结束对字符串的读取。

    如果数组的大小小于字符串的长度+1,程序在运行时可能要出现问题,所以应当确保数组的大小要大于字符串长度的大小+1;

    这段程序的字符串长度+1小于数组的大小:
    char str2[12]="hello jiajia";
        char *p2=str2;

        printf("/n/n/n%s/n/n",str2);
       
        for(int i=0;i<28;i++)
        {
            printf("%c:%d:%p/n",*p2,*p2,p2);
            p2++;
        }

    使用printf打印字符串,程序需要找到'/0'才能结束读取,结果找遍整个数组没有找到,只有继续顺着地址寻找,一直找到某个地址上的assii是0的,字符串才读取完毕。所以本段程序在读取完"hello jiajia"之后,后面可能还会有几个随机的字符,就是因为字符串终止于'/0'。

    (2)char arr[]="Hello World!";
        这种初始化方法不用担心数组大小过小的情况,数组的大小由编译器决定。
    (3)char arr[]={'H','e','e','l','o',' ','W','o','r','l','d','/0'};
        同第二种方法结果相同,但显然要麻烦许多。另外,' '代表空格,ascii值是32,'/0'代表字符串结束,ascii值是0;
    (4)char *p="Hello World";
    使用数组的方式初始化。同数组不同之处在于,p是一个变量,可以做递增、递减运算,而arr是数组的首地址,是一个地址常量,不能做递增、递减运算。

    char *name="liujiajia";
        name[0]='L';
        printf("/n%s/n",name);
    name[0]='L';这句代码在最新的c99标准中会引发程序异常。需要注意。


    char *string="c programe";
        char *string2;    
        string2=string;    //将指针string的值赋给string2
        
        printf("/nstring=%s,&string=%p,string=%p/n",string,&string,string);
        printf("/nstring=%s,&string=%p,string=%p/n",string2,&string2,string2);

    上面这段程序最后显示,指针string所指向的地址和指针string2所指向的地址相同,这就说明它们指向的是内存里面同一个字符串,也就是说字符串本身并没有复制,而是产生了一个指向同一个字符串的指针。这样程序的效率会更加的高。如果需要复制字符串可以使用 strcpy() 或 strncpy()。

    0
    0
    (请您对文章做出评价)
    展开全文
  • 字符串数组初始化相关问题总结

    千次阅读 2017-12-05 20:58:25
    C字符串数组初始化相关问题总结 在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式: (1) char str[10]="";(2) char str[10]={'\0'};(3) char str[10]; ...

    C字符串数组初始化相关问题总结


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

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

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

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

     


    1. 基本问题

    数组可以初始化,即在定义时,使它包含程序马上能使用的值。
    例如,下面的代码定义了一个全局数组,并用一组Fibonacci数初始化:

    1 int iArray[10]={11235813213455); //初始化
    2 void main()
    3  {
    4     //...
    5  }

     


      初始化数组的值的个数不能多于数组元素个数,初始化数组的值也不能通过跳过逗号的方式来省略,这在C中是允许的,但在C++中不允许。
      例如,下面的代码对数组进行初始化是错误的:
      

    复制代码
    1        int arrayl[5]={123456}; //error-初始化值个数多于数组元素个数
    2     int array2[5]={1,,234}; //error:初始化值不能省略
    3     int array3[5]={123,}; //error:初始化值不能省略
    4     int array4[5]={}; //error:语法格式错误
    5     void main()
    6     {
    7       //...
    8     }
    复制代码

     


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

    复制代码
     1 //*********************
     2 //**   ch7_2.cpp  **
     3 //*********************
     4     #include <iostream.h>
     5 
     6     int array1[5]={1,2,3};
     7     static int array2[5]={1};
     8 
     9     void main()
    10     {
    11      int arr1[5]={2};
    12      static int arr2[5]={1,2};
    13 
    14      int n;
    15      cout <<"global:\n";
    16      for(n=0; n<5; n++)
    17        cout <<" " <<array1[n];
    18 
    19      cout <<"\nglobal static:\n";
    20      for(n=0; n<5; n++)
    21        cout <<" " <<array2[n];
    22 
    23      cout <<"\nlocal:\n";
    24      for(n=0; n<5; n++)
    25        cout <<" " <<arr1[n];
    26 
    27      cout <<"\nlocal static:\n";
    28      for(n=0; n<5; n++)
    29         cout <<" " <<arr2[n];
    30      cout <<endl;
    31     }
    复制代码

      运行结果为:
        global:
         l  2  3  0  0
        global static:

         1  0  0  0  0
        local:
         2 23567 23567 23567 23567
        local static:
         1  2  0  0  0
      例中,全局数组和全局静态数组的初始化是在主函数运行之前完成的,而局部数组和局部静态数组的初始化是在进入主函数后完成的。
      全局数组arrayl[5]对于初始化表的值按序初始化为1,2,3,还有两个元素的值则按默认初始化为0。
      全局静态数组array2[5]与全局数组的初始化情况一样,初始化表值(1)表示第1个元素的值,而不是指全部数组元素都为1。
      局部数组arrl[5]根据初始化表值的内容按序初始化, 由于初始化表值只有1个,所以还有4个元素的值为不确定。在这里均为数值23567。
      局部静态数组arr2[5]先根据初始化表按序初始化,其余3个数组元素的值默认初始化为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";
      该代码不会引起编译错误,但由于改写了数组空间以外的内存单元,所以是危险的。


     

    3.省略数组大小

      有初始化的数组定义可以省略方括号中的数组大小。
      例如,下面的代码中数组定义为5个元素:
        int a[]={2,4,6,8,10};
      编译时必须知道数组的大小。通常,声明数组时方括号内的数字决定了数组的大小。有初始化的数组定义又省略方括号中的数组大小时,编译器统计花括号之间的元素个数,以求出数组的大小。
      例如,下面的代码产生相同的结果:
        static int a1[5]={1,2,3,4,5};
        static int a2[]={1,2,3,4,5};
      让编译器得出初始化数组的大小有几个好处。它常常用于初始化一个元素个数在初始化中确定的数组,提供程序员修改元素个数的机会。
      在没有规定数组大小的情况下,怎么知道数组的大小呢? sizeof操作解决了该问题。 例如,下面的代码用sizeof确定数组的大小:

    复制代码
     1     //*********************
     2     //** ch7_3.cpp **
     3     //*********************
     4 
     5     #include <iostream.h>
     6 
     7     void main()
     8     {
     9      static int a[]={1,2,4,8,16};
    10      for(int i=0; i<(sizeof(a)/sizeof(int)); i++)
    11       cout <<a[i] <<" ";
    12      cout <<endl;
    13     }
    复制代码

     

      运行结果为:
        1 2 4 8 16
      sizeof操作使for循环自动调整次数。如果要从初始化a数组的集合中增删元素,只需重新编译即可,其他内容无须更动。
      每个数组所占的存储量都可以用sizeof操作来确定! sizeof返回指定项的字节数。sizeof常用于数组,使代码可在16位机器和32位机器之间移植:
      对于字符串的初始化,要注意数组实际分配的空间大小是字符串中字符个数加上末尾的,'\0',结束符。
      例如,下面的代码定义一个字符数组:

        

    复制代码
     1 //*********************
     2 //**   ch7_4.cpp  **
     3 //*********************
     4 
     5     #include <iostream.h>
     6 
     7     void main()
     8     {
     9      char ch[]="how are you";
    10 
    11      cout <<"size of array: " <<sizeof(ch) <<endl;
    12      cout <<"size of string: " <<strlen("how are you")  <<endl;
    13     }
    复制代码

     

      运行结果为:
        size of array:12
        size of string:ll
     例中,数组大小为12,而字符串长度为11。
      省略数组大小只能在有初始化的数组定义中。
      例如,下面的代码将产生一个编译错误:
        int a[];//error:没有确定数组大小
      在定义数组的场合,无论如何,编译器必须知道数组的大小。

    展开全文
  • Anyone know of a simple library or function to parse a csv encoded string and turn it into an array or dictionary?I don't think I want the built in csv module because in all the examples I've seen tha...

    Anyone know of a simple library or function to parse a csv encoded string and turn it into an array or dictionary?

    I don't think I want the built in csv module because in all the examples I've seen that takes filepaths, not strings.

    解决方案

    I would use StringIO:

    import StringIO

    import csv

    scsv = """1,2,3

    a,b,c

    d,e,f"""

    f = StringIO.StringIO(scsv)

    reader = csv.reader(f, delimiter=',')

    for row in reader:

    print '\t'.join(row)

    simplier version with split() on newlines:

    reader = csv.reader(scsv.split('\n'), delimiter=',')

    for row in reader:

    print '\t'.join(row)

    Or you can simply split this string into lines using \n as separator, and then split each line into values, but this way you must be aware of quoting, so using csv module is preferred.

    展开全文
  • 字符数组及其定义和初始化,C语言字符数组详解字符串的存储方式有字符数组和字符指针,我们先来看看字符数组。因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别对...
  • java字符串数组初始化和赋值

    万次阅读 多人点赞 2015-04-20 23:20:14
    //一维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","",...String数组初始化区别  首先应该明白java数组里面存的是对象的引用,所以必须初
  • 1、字符数组的定义与初始化字符数组初始化,最容易理解的方式就是逐个字符赋给数组中各元素。char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号...
  • //一维数组String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组String[] str = ...String数组初始化区别首先应该明白java数组里面存的是对象的引用,所以必须初始化才能用;String[] str ...
  • memset用于对字符串数组初始化,其中int ch为字符的ASCII码。当使用memset对int类型的数组a进行初始化时,memset函数将a强制转化为字符串数组进行的。举例如下: 将int a[5]中所有元素初始化为10:memset(a,10,5)...
  • 二维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。二维字符数组的定义二维字符数组的定义格式为:char 数组名[第一维大小][第二维大小];如:char c[3][10]; //定义了一个3...
  • const tags = [ '西红柿,西瓜', '香蕉,橙子,苹果,柠檬', '桃子,梨,草莓,椰子', ].join(',').split(','); 结果:
  • Java数组的创建和初始化一、一维数组的创建和初始化1、基本数据类型的静态初始化int [ ] Array = { 1 , 2 , 3 , 4 } ;或者int [ ] Array = new int [ ]{1,2,3,4} ;2、基本数据类型的动态初始化int [ ] Array = new ...
  • 字符串数组初始化与赋值

    千次阅读 2018-12-10 23:09:35
    char **args; 初始化一个二级指针。在内存中值会有sizeof(char**)大小的内存空间,这个变量是声明出来的,在栈空间,通常64...字符串的首地址的数组。 所以char **args = (char**)malloc(3*sizeof(char*)); 这里...
  • C_字符/字符串数组初始化_朱

    千次阅读 2018-04-26 00:29:31
    字符数组char a[5];//定义一个包含5个字符字符数组 基础:1.在C语言中引用一个单个字符时,用单...//定义并初始化一个含有5个元素的字符数组注:C语言编译器会自动推论其长度,推论依据是初始化式中初始化元素的个...
  • 字符串和一级指针内存模型专题字符串基本操作字符数组初始化方法int 在C语言中使用字符数组来模拟字符串C语言中的字符串是以’0’结束的字符数组C语言中的字符串可以分配于栈空间,堆空间或者只读存储区在C语言中...
  • 今天在查看linux下的关于电源管理部分的源码时,刚看到第一段字符串数组的初始化,就感觉怪怪的, 仔细看了一下,原来是使用了GCC 下的指定下标的数组初始化. linux/kernel/power/suspend.c const char *const pm_...
  • vb字符串数组初始化赋值

    千次阅读 2018-08-30 10:27:31
    Dim str() = {"1","2","3","4","5"}  
  • Java字符串数组初始化和赋值

    万次阅读 2017-04-29 09:10:37
    原文地址:...//一维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","","","",""}; String[] str = {"","","","
  • 【转】字符串数组初始化0 与memset 0 效率的分析 最近要分析程序的性能,所以上网查了查资料,的处理下面结论: #defineARRAYSIZE 2048 voidmain() {   chararrayA[ARRAYSIZE]={0};   chararrayB[ARRAYSIZE];...
  • 头文件#pragma once#include using namespace std;typedef unsigned char uchar;typedef unsigned short ushort;class CM_message{public:CM_message();virtual ~CM_message();private:static const int m_ihead_len...
  • ![图片说明](https://img-ask.csdn.net/upload/201604/18/1460964771_211986.png) 错误是“{ expected after token ; ” 请问为什么会出现这样的错误,该怎么解决?
  • 三种初始化方法  -char c[] = {'C', 'p','g',};  -char c[] = {"C program"};  -char c[] = "C program";   处理函数  -strlen(字符串) 测试字符串长度  -strupr
  • 请看:https://www.cnblogs.com/xmhsincere/p/4915354.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,689
精华内容 2,275
关键字:

字符串数组初始化