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

    2016-05-24 16:45:00
    Q:不能把字符串"HELLO!"赋给数组b的语句是(B) A、char b[10]={'H','E','L','L','O','!','\0'}; B、char b[10];b="HELLO!"; C、char b[10];strcpy(b,"HELLO!...A:字符数组初始化有两...

    Q:不能把字符串"HELLO!"赋给数组b的语句是(B)

        A、char b[10]={'H','E','L','L','O','!','\0'};
        B、char b[10];b="HELLO!";
        C、char b[10];strcpy(b,"HELLO!");
        D、char b[10]="HELLO!";

    A:字符数组初始化有两种方法:一种是逐个字符赋值,另一种是用字符常量对整个数组赋值。 

    A是第一种,D是第二种,显然第一种比第二种繁琐复杂, C是字符串拷贝函数,B不存在将字符串常量直接赋值给char数组变量的方式。 

     

    拓展:

    函数格式: char *strcpy (char *s1, const char *s2); 功能: 将S2所指的字符串拷贝到S1所指的字符串中。 

    说明: 

    (1)参数S1S2都是指向字符串的指针。S1可以是字符数组名或字符指针,但不能是字符型常量,S2可以是字符串常量、字符数组或字符指针;

    (2)将S2所指的字符串拷贝到S1所指的字符串中,用赋值语句S1=S2;是不行的,赋值语句要求左边是左值,S1是常量; 

    (3)要保证S1的长度足够大,以便能容纳下S2所指的字符串,否则引起错误。 C 对于非strtic型数组不初始化,其元素值不能确定。对strtic数组元素不赋初值,系统会自动赋以0值。

    转载于:https://www.cnblogs.com/yedushusheng/p/5523964.html

    展开全文
  • C语言字符数组初始化

    2013-03-31 18:27:58
    C语言字符数组初始化
  • C语言中字符数组初始化的几种方法

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

    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.参考博客

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

    千次阅读 2020-04-08 16:38:20
    字符数组初始化为空1. 总结起来有以下三种方式:2. 分析3. 结论 1. 总结起来有以下三种方式: (1) char str[10]=""; (2) char str[10]={’\0’}; (3) char str[10] = ‘\0’; 2. 分析 第(1)(2)种方式是将str数组的...

    1. 总结起来有以下四种方式:

    #define STR_LEN 1023

    (1) char str[STR_LEN]="";
    (2) char str[STR_LEN]={’\0’};
    (3) char str[STR_LEN] = ‘\0’;
    (4) char str[STR_LEN];
    memset(str, 0 ,sizeof(str));

    2. 分析

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

    3. 结论

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

    项目中出现的原因:
    因为有过用1,2的方式初始化,导致后面字符未初始化,而是随机值,正好使用了这些值,打印出来也是乱码导致。

    展开全文
  • 初学字符串数组时常常被那些绕弯的题搞得头昏脑胀,下面来简单聊一下字符数组初始化和复制函数的一些需要注意的问题。 字符数组初始化方式 如果指定一个长度为5的字符数组,并且赋满值,这时并没有多余的空间str[5]...

    初学字符串数组时常常被那些绕弯的题搞得头昏脑胀,下面来简单聊一下字符数组初始化和复制函数的一些需要注意的问题。

    字符数组初始化方式

    如果指定一个长度为5的字符数组,并且赋满值,这时并没有多余的空间str[5]为’\0’,所以str1的后面是接其它随机元素的,没有字符停止符号;但当初始化的长度大于赋值的长度时,系统会在后面自动加入’\0’,即str2后5个元素都是’\0’。
    需注意,str3和str4并不等价,str3的长度为5,后边不含有停止符号’\0’,而str4人为的加入’\0’增加了数组长度。
    str0-str4的长度依次为:5,5,10,5,6。

    char str0[5]; 
    str0[0] = 'a'; str0[1] = 'b'; str0[2] = 'c'; str0[3] = 'd'; str0[4]='e';
    char str1[5]  = { 'a', 'b', 'c', 'd', 'e'};
    char str2[10] = { 'a', 'b', 'c', 'd', 'e'};
    char str3[ ]  = { 'a', 'b', 'c', 'd', 'e'};
    char str4[ ]  = { 'a', 'b', 'c', 'd', 'e', '\0'};
    

    如果采用"abcde"方法赋值,该串串由系统默认在后面添加了’\0’,此时数组长度为6,所以str6由于长度不够而报错,并且str5与str4是等价的。

    char str5[ ] = "abcde";	
    char str6[5] = "abcde";	//注意!!!这种会报错!!!!
    

    打印和复制

    以上赋值方法中,没有’\0’是危险的,当使用打印或复制功能时……会出错。

    cout << "str0: " << str0 << endl;
    cout << "str1: " << str1 << endl;
    cout << "str2: " << str2 << endl;
    cout << "str3: " << str3 << endl;
    cout << "str4: " << str4 << endl;
    cout << "str5: " << str5 << endl;
    

    结果为:
    烫烫烫
    cout和printf函数在打印字符数组时以遇到’\0’为结束标志,但是str0,str1,str3都没有加入’\0’,所以会访问到预期长度以外的内存。
    strcpy函数也同样如此,在复制时也以’\0’为结束,当被复制的字符数组没有结束标志时,系统就会崩溃,朋友们可以自己试试,咣咣报错也是挺有意思的。

    我是没信号的法杖,发不出去信号,也接收不到信号。

    展开全文
  • 字符数组初始化 1: char str[]="123";//不报错 2: char str[4]; str="123";//不能将const char[4] to char[4] 字符指针初始化 1: char *str="123";//不报错 2: char *str; str="123";//不报错 求大神解释这是...
  • 发现了一个字符数组初始化的误区,而这个往往能导致比较严重的性能问题,分析介绍如下:往往我们在初始化一个字符 数组,大概有如下几种写法: 1 char array1[1024] = ""; 2 char array2[1024] = {0}; 3 char ...
  • 1.字符数组初始化里面元素值为多少 (1) 字符数组定义在main函数外面
  • 首先为什么要初始化数组:假如创建了一个没有初始化的数组,里面其实各个位置是含有值的,举例: ... 当然可能会有一些情况导致这种方法不能初始化,或者字符数组是动态创建的,没有一个可以进行{0}的.
  • 字符数组初始化方式总结  (1)char c[10]={'c',' ','p','r','o','g','r','a','m'};  (2)char c[]={'c',' ','p','r','o','g','r','a','m'};  (3)char c[]={"c program"};  (4)char c[]="c ...
  • 无论是定义数组还是字符数组,是要对其中的元素进行初始化,那么剩余未被初始化的部分就全部变为0(value),是不是总会在这不算,末尾添加一个\0。 如果我们通过诸如a[i]=x,的方式对数组(或字符数组)中的元素赋值...
  • 字符串与字符数组初始化及长度计算:  方式一:char a[]="hello";系统自动在末尾补'\0',sizeof的结果为6,strlen的结果为5;  方式二:char a[]={'h','e','l','l','o'}; 末尾不补'\0',sizeof的结果为5,...
  • 字符数组初始化问题

    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数组的所有...
  • 类String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写或小写的所有字符字符串的副本。2、特点【重要】a、字符串不变:字符串的值在创建...
  • 字符数组初始化 为什么要使用,如果不赋初值,有时候当输入的字符size小于定义的字符size时,后面的部分显示就会出现乱码 memset 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小...
  • char cha[] = {'a', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'd'}; 初始化字符数组的时候如果有多个空格,一定要这么敲进去吗
  • 字符数组用不同的方式初始化,结果可能不同 下面这段程序,把字符数组用不同的方式去初始化#include #include #include int main() { char arr[] = "abc"; printf("%d\n", strlen(arr));//3 printf("%d\n",...
  • C++ 字符数组初始化

    2013-06-13 16:46:01
    字符数组的输入输出可以有两种方法: (1) 逐个字符输入输出,不会在后面自动加\0结束符,需要记录数组长度,对应初始化的例子: const int N=8; char ch[N]={'a','b','c','d','e','f','g','k'}; 此时不会在其后...
  • 怎么给这个数组赋值呢? 1、定义的时候直接用字符串赋值 char a[10]="hello"; 注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的! 2、对数组中字符逐个赋值 char a[10]={'h','e','l','l'...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,029
精华内容 3,211
关键字:

字符数组初始化