C语言字符数组回顾

Posted dudulukeyxian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言字符数组回顾相关的知识,希望对你有一定的参考价值。

赋值篇:


 Part1      错误引例*2:

1     char c6[];//WRONG
2     c6="HELLO";//WRONG
3 
4     char c7[];//WRONG
5     c7[0]=H;//WRONG
6     c7[1]=E;//WRONG
7     c7[2]=L;//WRONG
8     c7[3]=L;//WRONG
9     c7[4]=O;//WRONG
 
1.不允许声明之后才对整个字符数组进行赋值,比如c6
2.除非声明时顺便赋值了,否则不允许不声明数组长度,比如c7
 

Part2:
1     char c1[]={H,E,L,L,O};
2     char c2[]={H,E,L,L,O,\\0};
3     char c3[10]={H,E,L,L,O,\\0};
4     printf("c1:%s  sizeofc1:%d\\n",c1,sizeof(c1));
5     printf("c2:%s  sizeofc2:%d\\n",c2,sizeof(c2));
6     printf("c3:%s  sizeofc3:%d\\n",c3,sizeof(c3));

技术图片

1.printf %s时,每次地址+1,直到找到‘\\n‘为止,所以c1会乱码

 


 Part3:

1     char *c4="HELLO";
2     char *c5="HELLO\\0";
3     char *c6;
4     c6="HELLO";
5     printf("c4:%s  sizeofc4:%d\\n",c4,sizeof(c4));
6     printf("c5:%s  sizeofc5:%d\\n",c5,sizeof(c5));
7     printf("c6:%s  sizeofc6:%d\\n\\n",c6,sizeof(c6));

技术图片

1.注意字符指针可以声明后赋值,与第一个c6对比
2.注意这里打印的size,因为打印的是字符串数组的首字地址size,所以size都是一样的

 


Part4:

1     char c7[]="HELLO";
2     char c8[]="HELLO\\0";

技术图片

1.注意用字符串常量赋值会自动补‘\\0‘
2.注意就算你自己加了‘\\0‘还是会给你自动加‘\\0‘
 

Part5:
 1     char c9[5];
 2     c9[0]=H;    c9[1]=E;
 3     c9[2]=L;    c9[3]=L;    c9[4]=O;
 4 
 5     char c10[6];
 6     c10[0]=H;    c10[1]=E;
 7     c10[2]=L;    c10[3]=L;
 8     c10[4]=O;    c10[5]=\\0;
 9     printf("c7:%s  sizeofc7:%d\\n\\n",c7,sizeof(c7));
10     printf("c9:%s  sizeofc9:%d\\n\\n",c9,sizeof(c9));
11     printf("c10:%s  sizeofc10:%d\\n\\n",c10,sizeof(c10));

技术图片

1.注意c9,因为printf %s时,每次地址+1,直到找到‘\\n‘为止,所以会把c10也一起打印了

 


Part6      scanf输入:

    char a[10];
    scanf("%s",a);
    printf("%s",a);

假如像这样普通输入的话,遇到空格、换行都会使字符串赋值中断,一种解决方法是看有多少段,逐段赋值然后连到一起。另一种方法是gets()

1     char a[10];
2     gets(a);
3     puts(a);

1.gets()可以识别空格,直到换行符出现,舍弃换行符,并自动补‘\\0‘
2.puts()将字符串输出后会自动换行
3. getchar()、putchar()则是可以存储空格和换行的字符输入输出函数

 

函数篇:


Part1      strcpy(char * dest,char *sr):

1     char c11[6];
2     strcpy(c11,"HELLO\\0");
3     printf("c11:%s  sizeofc11:%d\\n\\n",c11,sizeof(c11));
 技术图片
 
功能:复制
1.dest只能是数组名,且已经声明过长度,sr可以实字符串常量或数组名且最末尾必须是‘\\n‘
2.注意c11不可以不声明长度就开始复制
3.假如要用到指针,也必须使指针已经指向某个数组才能使用,比如这样
1     char *c11;
2     char temp[6];
3     c11=temp;
4     strcpy(c11,"HELLO\\0");
5     printf("c11:%s  sizeofc11:%d\\n\\n",c11,sizeof(c11));
 

Part2      strcat(char *dest,char *sr):
1     char c7[]="HELLO";
2     char c8[]="HELLO\\0";
3     printf("c8:%s  sizeofc8:%d\\n",c8,sizeof(c8));
4     printf("c8+c7:%s\\n",strcat(c8,c7));
5     printf("c8:%s  sizeofc8:%d\\n\\n",c8,sizeof(c8));

技术图片

功能:把sr的内容复制到dest结尾处(覆盖‘\\0‘) 

1.c8里有2个‘\\n‘,cat时扫描到第一个‘\\n‘即开始复制
2.strcpy和strcat都是以‘\\0‘作为结束标识
 

 Part3      strlen(char *str1):

1     char c3[10]={H,E,L,L,O};
2     printf("strlen(c3):%d   sizeof(c3):%d",strlen(c3),sizeof(c3));

技术图片

功能:求实际长度

以上是关于C语言字符数组回顾的主要内容,如果未能解决你的问题,请参考以下文章

进阶C语言指针和数组笔试题解析

c语言字符数组如何比较?

c语言对二维数组的某一行赋值 如u8 a[20][20]; 仅对a[10]这一行赋值

C语言字符串转成INT型数组

2019/8/24 C语言回顾

C语言,整数数组转化为字符串