所有的字符数组处理函数都包括在 <string.h>这个头文件中

一、strlen 函数

原型:size_t strlen(char const* string);

在C语言中如何计算一个数组或者一个字符数组的长度?在C语言中没有字符串类型,字符串是存放在字符型数组中,所以一般形式的字符串就是数组。
一般来说,大家都是使用sizeof来计算数组长度的:

 // 整型数组int a[] = {1,2,3,4,5};int length = sizeof(a)/sizeof(a[0);printf("%d",length);

sizeof是一个操作符,返回的是一个对象或类型所占的字节大小。
但是在字符数组中sizeof返回的往往不是我们需要的。
因为字符数组的往往需要比其他数组多占一个空间长度。比如一个有效字符串的长度为9,那么实际长度则为10,而第10个字符是'\0'。表示字符串结束。

使用strlen函数则会返回有效长度。

#include <stdio.h>int myLen(const char *line)
{int strlen = 0;while (line[strlen] != '\0'){strlen++;}return strlen;
}int main(int argc, char const *argv[])
{char line[] = "hello";printf("SIZEOF的长度= %d\n", sizeof(line));  //6printf("strlen的长度= %d", myLen(line)); // 5return 0;
}

二、strcmp

原型:int strcmp(char const *s1, char const *s2, size_t len);;

功能:比较两个字符串。如果s1小于s2,strcmp函数返回一个小于零的值。如果s1大于s2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。

#include <stdio.h>
#include <string.h>int mycmp(const char *c1, const char *c2)
{while (*c1 == *c2 && *c1 == '\0')  // 通过指针的自增来比较,同时判断是否有到了结束位置{c1++;c2++;}int result = *c1 - *c2;return result == 0 ? 0 : (result > 0) ? 1 : -1;
}
int main(int argc, char const *argv[])
{char char1[] = "bb";char char2[] = "a";printf("%d\n", strcmp(char1, char2));  // 1printf("%d", mycmp(char1, char2));   // 1return 0;
}

三、strcat函数

原型:char *strcat(char *dst, char const *src);

功能:将一个字符串添加(连接)到另一个字符串的后面。

注意:src和dst的所指的内存区域不能重叠,如果发生重叠,其结果是未定义的。

#include <stdio.h>
#include <string.h>char *mycat(char *des, const char *src)
{char *temp = des; //定义临时指针指向目标字符数组temp = des + strlen(des); //将目标字符串移入到结尾while (*temp++ = *src++)  //通过指针自增实现赋值*temp = '\0';  //将目标字符串的结尾return des;// char *temp = des;// while (*temp != '\0')// {//   temp++;// }// while ((*temp++ = *src++))//   *temp = '\0';// return des;
}int main(int argc, char const *argv[])
{/* code */char c1[] = "hello";char c2[] = "world";printf("%s\n", mycat(c1, c2));  //helloworldreturn 0;

四、strcpy

原型:char *strcpy(char *dst, char const *src);

功能:将参数src字符串复制到dst参数中。如果参数src和dst在内存中出现重叠,其结果是未定义的。由于dst参数将进行修改,所以它必须是个字符数组或者是一个指向动态分配内存的数组的指针,不能使用字符串常量。返回参数dst的一份拷贝。
注意

目标参数dst的以前内容将被覆盖并丢失。即使新的字符串比dst原先的内存更短,由于新字符串是以NUL字符结尾,所以老字符串最后剩余的几个字符也会被有效的删除。如果字符串比数组长,多余的字符仍被复制,它们将覆盖原先存储于数组后面的内存空间的值。所以必须保证目标字符数组的空间足以容纳需要复制的字符串。

#include <stdio.h>
#include <string.h>char *mycpy(char *dst, char *const restrict src)
{int idx = 0;while (c2[idx]){dst[idx] = src[idx];idx++;}dst[idx] = '\0';return dst;
}int main(int argc, char const *argv[])
{char c1[] = "adcdee";char c2[] = "eeeeddddddddd";printf("%s\n", strcpy(c1, c2)); //eeeedddddddddprintf("%s\n", mycpy(c1, c2)); //eeeedddddddddreturn 0;
}

五、strchr函数

原型:char *strchr(char const *str, int ch);

功能:在一个字符串中查找一个特定字符。

注意:第2个参数是一个整型值。但是,它包含了一个字符值。strchr在字符串str中查找字符ch第一次出现的位置,找到后函数返回一个指向该位置的指针。如果该字符并不存在于str中,函数就返回一个NULL指针。strrchr的功能和strchr基本一致,只是它所返回的是一个指向字符串中该字符最后一次出现的位置(最右边那个)。
为了直观编程显示,第二个参数设成字符型

#include <stdio.h>
#include <string.h>char *Strchr(char *dst, const char str)
{while (*dst != '\0'){if (*dst == str){return dst;}dst++;}return NULL;
}int main(int argc, char const *argv[])
{char c1[] = "hello";char *p = strchr(c1, 'l');printf("%s\n", p);  //lloprintf("%s\n", Strchr(c1, 'l'));  //lloreturn 0;
}

// 暂时就总结这么多,以后补充

C语言中常用的字符数组函数相关推荐

  1. c语言中常用的字符函数以及字符串函数

    文章目录 前言 一.常用字符串函数 1.strlen() 2.strcpy() 3.strcat() 4.strcmp() 5.strstr() 6.memcpy() 6.memmove() 二.qs ...

  2. C语言中字符串和字符数组的区别

    C语言中字符串和字符数组的区别 1.基本概念 2.代码分析 3.总结 1.基本概念 字符串和字符数组很相似,但是有本质上的区别. (1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自 ...

  3. c语言中空格字符怎么表示_C语言中常用的字符串操作函数

    作者:陈太浪 出处:https://home.cnblogs.com/u/TomHe789/ C语言中提供了许多的字符串操作函数,常见的字符串操作函数有以下几种: 1.求字符串长度的函数 原型函数:s ...

  4. 【linux C】C语言中常用的几个函数的总结【二】

    3.fgets 虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,get ...

  5. c语言中如何返回一个数组函数

    在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组. 在大多数情况下,一维数组和一维指针是可以通用的. 比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并 ...

  6. c语言中比较两个数组函数,输入两个数组,调用large函数比较,计数,输出统计结果...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include void main() { int large(int x,int y); int a[10], b[10], i, n=0, m=0, ...

  7. c语言中 快速输出字符数组后几位方法

    #include<stdio.h>int main (){char s[] = "123253426" ;char *t = &s[2];printf(&quo ...

  8. c语言设置输出字符大小_C语言中常用的几个头文件及库函数

    点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来源:https://www.jb51.net/article/124594.htm 这 ...

  9. c语言常用数学函数大全查询,C语言数学函数 C语言中全部可用的数学函数有哪些?...

    导航:网站首页 > C语言数学函数 C语言中全部可用的数学函数有哪些? C语言数学函数 C语言中全部可用的数学函数有哪些? 相关问题: 匿名网友: /*--------------------- ...

最新文章

  1. MapReduce基础开发之三字段处理并输出Hive表
  2. Spring Aop开发过程中可能出现的异常(通过这些异常可以知道需要什么Jar包)
  3. Liferay激活Navigation和Breadcrumb
  4. (转载)简洁、明晰!数据库设计三大范式应用实例剖析
  5. 还要做手机?罗永浩称还完债就重返科技行业
  6. “抗疫”新战术:世卫组织联合IBM、甲骨文、微软构建了一个开放数据的区块链项目!...
  7. oracle将字符串转成数组_【算法打卡】上升下降字符串
  8. Navicat-数据库管理工具
  9. Android HWUI硬件加速模块浅析
  10. 通过BeanDefinitionReader获取BeanDefinition的三种不同方式
  11. 2018华为网络技术大赛复赛
  12. python读取文件并替换字段_python 读取文件并替换字段的实例
  13. h5-吸顶效果的实现方法
  14. 腾达无线路由器dns服务器,腾达无线路由器如何设置DNS
  15. 使用RoboCopy 命令[转载]
  16. 关于视频字幕(有无外挂字幕)的提取死磕一天的总结
  17. 艾利特代理商—艾利特EC63机器人安装教程
  18. C语言学习知识总结————第一节课
  19. python--if语句判断数字正负值
  20. 一个故事讲完进程、线程和协程

热门文章

  1. 24届近5年华南理工大学自动化考研院校分析
  2. 【IT名人堂】一个神奇的网站:58同城背后的数据库设计实践
  3. DATEDIFF 函数
  4. 开发的月薪3万以上很难么?
  5. 第118章 SQL函数 REVERSE
  6. jira接口(openapi)应用
  7. thumbnails java_JAVA 图片处理(基于Thumbnails)
  8. ios中使用SegmentedControl来切换视图
  9. 医疗器械电子硬件·安规与EMC设计
  10. c语言pair的用法,C++ std::pair的用法