C语言 字符数组详解

本文深入解析C语言中字符串的处理方式,包括字符数组、字符指针的存储与操作,以及常用的字符串函数如strcpy、strcat、strlen等的功能与用法。同时对比了strlen与sizeof在计算字符串长度上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串

C语言

字符串实际上就是以null字符'\0'结尾的一维数组。'\0'是系统自动添加作为该字符串结束的标识符。

 例:字符串"hello"总共有五个字符,但实际上是占据了六个字节。

C语言中,字符变量是用char定义的,但是C中没有储存字符串的数据类型。所以C中一般通过字符数组和字符指针来存储

字符数组输入和输出:

scanf:%c和%s两种类型。%c可以将空格还有换行符输入,%s则是遇空格及换行符结束,%s输入不用加&。

getchar()、putchar()单字符输入输出。有时候多次输入之间需换行的话,有时候需要多加一个getchar()来吸收回车符。

gets()和puts()用来输入和输出一行字符串,以换行符作为输入结束。输出的时候会自动紧跟一个换行符。

注意:字符数组末尾是以'\0'结尾的,scanf的%s和gets会自动在末尾添加'\0',但%c,getchar则不会,所以要注意手动添加。

 操作字符串的函数

 
 函数作用
1strcpy(a,b)复制字符串b至字符串a
2strcat(a,b)将字符串b连接至a的尾部
3strlen(a)返回字符串a的长度
4strcmp(a,b)

如果a=b,则返回0

如果a<b,则返回小于0

如果a>b,则返回大于0

5

strchr(a,'s') 

 

strrchr(a,'s') 

返回的是一个指针;

strchr是从左至右指向字符's'在字符串a中第一次出现的位置

strrchr则是从右至左指向字符's'在字符串a中第一次出现的位置

如果‘s’不存在则返回NULL

6strstr(a,b)

返回一个指针

指向字符串b在a中第一次出现的位置

 

 

 

 

 

 

 

 

 

 

下面对部分函数进行进一步的解释:

  • strlen函数和sizeof的区别

两者虽然都可以计算字符串的长度,但是区别还是相当的大。

一:从用处方面来说

strlen是专门针对计算字符串的函数,而sizeof作为单目运算符,它的参数可以是数组、指针、函数等等

返回长度

strlen作为函数,它遇到'\0'结束返回字符串的长度,但是sizeof则是把结束符'\0'计算在内。

例:

char s1[] = "abcdefghuijklmn";
printf("strlrn函数返回的字符长度是%d\n",strlen(s1));
printf("sizeof返回的字符长度是%d\n",sizeof(s1));

//////////////////////////////
输出:  
      strlrn函数返回的字符长度是15
      sizeof返回的字符长度是16

返回类型

strlen函数返回的是size_t 类型(即无符号整型),所以在一些条件判断中使用要格外的小心

例:

if(strlen(a)-strlen(b)>=0)

因为返回的是unsigned int型,所以if条件句里永远是真

 

  • strchr

上面表格中已经介绍了,strchr函数返回的是一个指针;

char s2[] = "3asdasdasdas";
char *q = strchr(s2,'d');
printf("%s\n",q);

///////////////////////////
输出: dasdasdas

 从上面可以看出它是从左至右开始查找目的字符,若查找成功返回的值是从目的字符向右到结束的字符串。

  • strrchr

 它是从右至左开始查找目的字符,返回的同样是从目的字符向右到结束的字符串。

char s2[] = "3asdasdasdas";
char *q = strrchr(s2,'d');
printf("%s\n",q);

///////////////////////////
输出:das

 

  • strstr

strstr函数同样返回的是一个指针,strstr查找的是字符串

例:

char s2[] = "3asdasdasdas";
char *q1 = strstr(s2,"das");
printf("%s\n",q1);
////////////////////////////
输出: dasdasdas

 

gets()/puts()-----》数组函数

gets可以把空格一块输入,puts输出完的时候自动跟一个换行符。

sscanf&sprintf

 

char str[100] = "203200:132.12,nice!",str2[100],str3[100];
int n;
double db;
//sscanf是把字符数组str里面的内容赋值给其他的部分
sscanf(str,"%d:%lf,%s",&n,&db,&str2);
//sprintf是把其他的内容赋值给字符数组str3
sprintf(str3,,"%d:%lf,%s",&n,&db,&str2);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值