C字符数组

xiaoxiao2021-02-28  133

c语言的运算符无法操作字符串。在C语言中把字符串当作数组来处理,因此,对字符串的限制方式和对数组的一样,特别是,它们都不能用C语言的运算符进行复制和比较操作。

1:字符数组的赋值只能对其元素一一赋值。:

2一定要理解赋值与初始化的区别:

3:系统对字符串常量也自动加一个'\0'作为结束符,有了结束标志'\0'后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。

4:C语言并没有提供可以直接操作字符串的运算符;“=”可以用于其他数据类型的赋值,但是不可以直接给字符串赋值

一:定义是初始化:

char test[10]; 1、定义的时候直接用字符串赋值 char test[10]="hello";  在声明中,=不是赋值运算符。

不能先定义再给它赋值,如char test[6; test[6]="hello";这样是错误的!

2、对数组中字符逐个赋值 char test[10]={'h','e','l','l','o'};

char test[3]; test={'a','b','c'}//错误  不能先定义再给它赋值

char test[10]="hello";与char test[10]={'h','e','l','l','o'}; 的区别在于 

test[10]="hello";等价于test[10]={'h','e','l','l','o','\0'};  C 语言规定了一个“字符串结束标志”,以字符'\0’代表。

3、对数组省略数组大小赋值

   char test[]={'h','e','l','l','o'};    

                 int testl[5]={1,2,3,4,5,6}; //error: 初始化值个数多于数组元素个数     int test2[5]={1,,2,3,4}; //error:初始化值不能省略

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

             char test[]; error   省略数组大小只能在有初始化的数组定义中

            int test[5]={1,2,3}; //正确

4:利用strcpy char test[10]; strcpy(test, "hello");

5:易错情况:

 (1):char test[10]; test[10]="hello";

   //error  一个字符不能容纳一个字符串且且test[10]也是不存在的,单个字符最大到test[0]--test[9]

 (2):char test[10]; test="hello";//test是指针,它已经指向在堆栈中分配的10个字符空间,

     现在这个情况test又指向数据区中的hello常量,这里的指针test出现混乱,不允许!

(3):不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理

(4):直接尝试对字符串进行复制或比较操作会失败。例如,假定str1和str2有如下声明:

char str1[10], str2[10];

利用=运算符来把字符串复制到字符数组中是不可能的:

str1 = "abc";     /*** WRONG ***/      str2 = str1;       /*** WRONG ***/

C语言把这些语句解释为一个指针与另一个指针之间的(非法的)赋值运算

5:试图使用关系运算符或判等运算符来比较字符串是合法的,但不会产生预期的结果:

if (str1==str2) ...    /*** WRONG ***/

这条语句把str1和str2作为指针来进行比较,而不是比较两个数组的内容。因为str1和str2有不同的地址,所以表达式str1 == str2的值一定为0。

6、字符串处理函数 6.1 字符串连接 char *strcat(char *str1,const char *2 );   功能:函数将字符串str2 连接到str1的末端,并返回指针str1 注:连接前两个字符串的后面都有一个' \0 ',连接时将字符串1后面的' \0 ‘去掉,只在新串最后保留一个' \0 ‘ 6.2 字符串复制   char *strcpy(char *strDestination,const char *strSource );   功能:复制字符串strSource 中的字符到字符串strDestination,包括空值结束符。返回值为指针strDestination。 注:      1、“字符数组1”必须写成数组名形式,“字符串2"可以是字符数组名,也可以是一个字符串常量      2、复制时连同字符串后面的' \0 ' 一起复制到数组1中      3、不能用赋值语句直接将一个字符串常量或者字符数组直接赋给一个字符数组(同普通变量数组是一样的),而只能用strcpy 函数处理。      4、可以用strcpy 函数将字符串2中的前若干个字符复制到字符数组1中去。

2.字符指针

在C语言中我们也可以使用字符指针来存储字符串。

字符指针初始化 char* str="zifuchuanshuzu"; 1

C语言对字符串常量是按照字符数组来处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时,只是把字符串首地址赋值给str。  输出:

printf("%s\n",str); 1

系统首先输出str指向的字符,而后自加1,直至遇到’\0’;与数组的输出方式相同。

字符指针的赋值 char *str; str="zifuzhizhen"; 12

对于字符指针这种赋值方式是正确的。与字符数组不同。

转载请注明原文地址: https://www.6miu.com/read-64226.html

最新回复(0)