> 백엔드 개발 > C#.Net 튜토리얼 > C언어에서 문자배열과 문자열을 적용하는 방법은 무엇인가요?

C언어에서 문자배열과 문자열을 적용하는 방법은 무엇인가요?

coldplay.xixi
풀어 주다: 2020-06-17 11:48:40
원래의
2765명이 탐색했습니다.

C언어에서 문자배열과 문자열을 적용하는 방법은 무엇인가요?

c语言字符数组与字符串应用方法是什么?

c语言字符数组与字符串应用方法:

1、字符数组的定义与初始化

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

char str[10]={ 'I',' ','a','m',' ',‘h','a','p','p','y'};
로그인 후 복사

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

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

2、字符数组与字符串

在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语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:

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

char str[ ]="I am happy";

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

char str[ ];
  str="I am happy";
로그인 후 복사

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

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

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};
로그인 후 복사

而不与下面的等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
로그인 후 복사

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

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

char str[5]={'C','h','i','n','a'};
로그인 후 복사

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

#include <stdio.h>
void main(void)
{
char c1[]={&#39;I&#39;,&#39; &#39;,&#39;a&#39;,&#39;m&#39;,&#39; &#39;,&#39;h&#39;,&#39;a&#39;,&#39;p&#39;,&#39;p&#39;,&#39;y&#39;};
char c2[]="I am happy";
int i1=sizeof(c1);
int i2=sizeof(c2);
printf("%d\n",i1);
printf("%d\n",i2);
}
로그인 후 복사

结果:10 11

3、字符串的表示形式

在C语言中,可以用两种方法表示和存放字符串:

(1)用字符数组存放一个字符串

  char str[ ]="I love China";
로그인 후 복사

(2)用字符指针指向一个字符串

   char* str="I love China";
로그인 후 복사

对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量"I love China"直接赋给该字符串变量,这是不对的。

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

两种表示方式的字符串输出都用

printf("%s\n",str);
로그인 후 복사

%s表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使str自动加1,使之指向下一个字符...,如此,直到遇到字符串结束标识符 " \0 "。

4、对使用字符指针变量和字符数组两种方法表示字符串的讨论

문자 배열과 문자 포인터 변수 모두 문자열을 저장하고 연산하는 데 사용할 수 있지만 둘 사이에는 차이점이 있으므로 혼동해서는 안 됩니다.

4.1. 문자 배열은 여러 요소로 구성되며 각 요소는 문자를 저장하는 반면 문자 포인터 변수는 주소(문자열/문자 배열의 첫 번째 주소)를 저장하며 문자열은 문자 포인터에 배치되지 않습니다. 변수(문자열의 첫 번째 주소입니다)

4.2. 할당 방법:

다음 방법을 사용하면 문자 배열의 각 요소에만 값을 할당할 수 있습니다.

char str[14]; char str[14];

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

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

     char* a;

     a="I love China";

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

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

         char* a="I love China";      

等价于:

           char* a;

    a="I love China";

而对于字符数组的初始化

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

不能等价于:

         char str[14];

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

4.4、如果定义了一个字符数组,那么它有确定的内存地址;而定义一个字符指针变量时,它并未指向某个确定的字符数据,并且可以多次赋值。

5、字符串处理函数 

5.1

char *strcat(char *str1,const char *2 );

char *strcat(char *strDestination,const char *strSource );

功能:函数将字符串str2 连接到str1的末端,并返回指针str1

注:连接前两个字符串的后面都有一个'

위 내용은 C언어에서 문자배열과 문자열을 적용하는 방법은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿