前言

string.h库函数是工程中很常用的字符串操作库函数。
在这篇博客中总结一下常用的几个string.h有关的库函数,在工程中避免重复造轮子,换句话说提高工程效率
(* ̄︶ ̄)。

  • char *strcpy(char *destin, const char *source);
    //函数原型:char *strcpy(char *destin, const char *source);
    //函数功能:从source常量字符串首地址复制到destin地址
    小细节:由于使用strcpy有可能造成内存的溢出,在工程中使用strcpy_s更为安全。
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数 string.h
//函数原型:char *strcpy(char *destin, const char *source);
//函数功能:从source常量字符串首地址复制到destin地址
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
int main()
{   char dest[10];const char* src = "123456";     //可以尝试一下不加const是否会报错strcpy(dest, src)              //在此处可以利用返回值进行连式编程,提高代码的灵活性printf_s("%s", dest);return 0;
}

测试结果:

  • char *strncpy(char *destin, char *source, int len);
    函数原型:char *strncpy(char *destin, char *source, int len);
    功能:将source指向的len个字符串拷到destin。
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型:char *strncpy(char *destin, char *source, int len);
//函数功能:将source指向的前len个字符串拷到destin。
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main()
{   char dest[10];const char* src = "123456";  strncpy(dest, src, 3);     dest[3] = '\0';printf("dest= %s, %s, %s", dest, dest + 4, dest + 5);//前三个字符是正确,后面的几个字符就是乱码return 0;
}

测试结果:

  • char* strcat(char * str1,char * str2);
    char* strcat(char * str1,char * str2);
    功能: 把字符串str2接到str1后面,str1最后的’\0’被取消
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型:char* strcat(char * str1,char * str2);
//函数功能:把字符串str2接到str1后面,str1最后的'\0'被取消
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main()
{   char dest[20] = "abcd";const char* src = "123456";strcat(dest, src);printf_s("dest= %s", dest);  // 这边输出是dest拼接srcreturn 0;
}

测试结果:

  • char *strncat(char *dest, const char *src, size_t maxlen)
    char *strncat(char *dest, const char *src, size_t maxlen)
    功能: 将字符串src中前maxlen个字符连接到dest中
    与strncpy不同,strncat会自动在末尾加‘\0’,若指定长度超过源字符串长度,则只复制源字符串长度即停止,更安全!
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型: char *strncat(char *dest, const char *src, size_t maxlen)
//函数功能: 将字符串src中前maxlen个字符连接到dest中
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main()
{   char dest[20] = "abcd";const char* src = "123456";strncat(dest, src,3);printf_s("dest= %s", dest);  // 这边输出是dest拼接src的前三个数字return 0;
}
  • int strcmp(char * str1,char * str2);
    函数模板 : int strcmp(char * str1,char * str2);
    函数功能: 比较两个字符串str1,str2,返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数       string.h
//函数原型: int strcmp(char * str1,char * str2);
//函数功能: 比较两个字符串str1,str2,比较两个字符串str1,str2,返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main()
{   char str1[5] = "abcd";char str2[5] = "abcd";char str3[5] = "1234";int ret1 = strcmp(str1,str2);printf_s("ret1 = %d\n",ret1);int ret2 = strcmp(str1, str3);printf_s("ret2 = %d", ret2);return 0;
}

侧式结果:

//函数原型: int strcmp(char * str1,char * str2);在对两个字符串进行比较十分有用,当两个字符串相同时,返回值为0,不同时返回值不为0;

  • int strncmp(char *str1,char *str2,int count)
    函数模板: int strncmp(char *str1,char *str2,int count)
    函数功能: 比较两个字符串str1,str2,返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   int strncmp(char *str1,char *str2,int count)
//函数功能: 功能: 对str1和str2中的前count个字符按字典顺序比较 返回: 小于0:str1<str2,等于0:str1=str2,大于0:str1>str2
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main()
{   char str1[6] = "abcd3";char str2[6] = "abcd2";int ret1 = strncmp(str1, str2, 4);  //对比可以看出对比前四个字节是相同得 ret1 = 0;printf_s("ret1 = %d\n",ret1);       //对比可以看出对比前五个字节是不完全相同得 ret1 = 1;int ret2 = strncmp(str1, str2, 5);printf_s("ret2 = %d", ret2);return 0;
}

测试结果:

  • char* strchr(char* str,char ch);
    char* strchr(char* str,char ch);
    功能: 找出str指向的字符串中第一次出现字符ch的位置、返回: 返回指向该位置的指针,如找不到,则返回空指针
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char* strchr(char* str,char ch);
//函数功能: 功能: 找出str指向的字符串中第一次出现字符ch的位置、返回: 返回指向该位置的指针,如找不到,则返回空指针
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char* strchr(char* str,char ch);
//函数功能: 功能: 找出str指向的字符串中第一次出现字符ch的位置、返回: 返回指向该位置的指针,如找不到,则返回空指针
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main()
{   char str[20] = "1234568789abcdeabc";char *p1 = strchr(str,'a');char* p2 = strchr(str,'f');printf_s("str = %d\n", str);printf_s("p1 = %d\n", p1);printf_s("p2 = %d\n", p2);return 0;
}

测试结果:测试结果和预测结果一致。后面我们学查找最后一个相同字符的函数strrchr();

  • char *strrchr(const char *s, int c)
    函数模板:char *strrchr(const char *s, int c)
    功能: 得到字符串s中最后一个含有被查字符的位置指针,返回: 最后被查相同位置指针
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char* strchr(char* str,char ch);
//函数功能: 功能: 找出str指向的字符串中第一次出现字符ch的位置、返回: 返回指向该位置的指针,如找不到,则返回空指针
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main()
{   char str[20] = "1234568789abcdeabc";char *p1 = strrchr(str,'a');printf_s("str = %d\n", str);printf_s("p1 = %d\n", p1);return 0;
}

测试结果:这个测试结果返回的是str+15就是最后一个字符a的地址,strrchr 比strchr多的 r 意指反向寻找,位置都是从1开始计数(非从0开始)

  • char* strstr(char* str1,char* str2);
    函数原型:char* strstr(char* str1,char* str2);
    功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符) 返回: 返回该位置的指针,如找不到,返回空指针
//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char* strstr(char* str1,char* str2);
//函数功能: 功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)返回: 返回该位置的指针, 如找不到, 返回空指针
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main()
{   char str[] = "1234568789abcdeabc";char str2[] = "568";char str3[] = "567";char* p1 = NULL;char* p2 = NULL;p1 = strstr(str,str2);p2 = strstr(str, str3);printf_s("str = %d\n", str);printf_s("p1 = %d\n", p1);printf_s("p2 = %d\n", p2);return 0;
}

测试结果:

char *strnset(char *s, int ch, size_t n)
函数原型:char *strnset(char *s, int ch, size_t n)
功能: 将字符串s中前n个字符设置为ch的值,返回: 指向s的指针


//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char *strnset(char *s, int ch, size_t n)
//函数功能: 将字符串s中前n个字符设置为ch的值,返回: 指向s的指针
#pragma warning(disable:4996)
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main(){char dest[10] = "abcdabc";char* rp = NULL;char ch = 'F';rp = strnset(dest, ch, 4);  //预测结果dest的前四个字符都应该变为FFFFprintf("after strnset dest is %s \n", rp);return 0;}

测试结果:

  • char *strset(char *s, int ch)
    函数原型:char *strset(char *s, int ch)
    功能: 将字符串s中所有字符设置为ch的值返回: 指向s的指针,这个函数和上面char *strnset(char *s, int ch, size_t n)不同之处在于全部都置为相同的字符。

//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char *strset(char *s, int ch, size_t n)
//函数功能: 将字符串s中所有字符设置为ch的值返回: 指向s的指针
#pragma warning(disable:4996)
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main(){char dest[10] = "abcdabc";char* rp = NULL;char ch = 'F';rp = strset(dest, ch);printf("after strnset dest is %s \n", rp);  //预测结果为全Freturn 0;}

测试结果:

  • char *strtok(char *s1, const char *s2)
    函数原型:char *strtok(char *s1, const char *s2)
    功能:分解s1字符串,用特定分隔符(s2)分隔成多个字符串
    返回: 字符串s1中首次出现s2中的字符前的子字符串指针
    strtok()在参数s1的字符串中发现参数s2中包涵的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s1字符串,往后的调用则将参数s1设置成 NULL。每次调用成功则返回指向被分割出片段的指针。

//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char *strtok(char *s1, const char *s2)
//函数功能: 分解s1字符串,用特定分隔符(s2)分隔成多个字符串 返回: 字符串s1中首次出现s2中的字符前的子字符串指针#pragma warning(disable:4996)
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main(){char dest[] = "ab,cd,ef,c";char* rp;char ch[] = ",";rp = strtok(dest, ch);while ( rp != NULL ){printf("rp: %s \n", rp);rp = strtok(NULL, ch);}return 0;}


这个函数看起来麻烦其实作用很简单,就是通过一个字符对字符串进行切割。说明:尽量使用可重入版的strtok,Windows平台下为strtok_s,Linux平台下为strtok_r。牢记strtok函数族的分隔规则:忽略字符串前后的分隔符,连续的分隔符被当做一个处理。在使用strtok前,请对源字符串进行备份,除非你可以接受字符串被修改这一事实(修改为分隔的第一个字符串)。

  • char *strupr(char *s)
    函数原型 char *strupr(char *s)
    函数功能: 将字符串s中的字符变为大写

//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char *strupr(char *s)
//函数功能: 将字符串s中的字符变为大写#pragma warning(disable:4996)
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main(){char str[] = "abcdefg";char *strnew = NULL;strnew = strupr(str);printf_s("strnew = %s", strnew);return 0;}

测试结果:

  • char *strlwr(char *s)
    函数原型 char *strlwr(char *s)
    函数功能: 将字符串s中的字符变为小写

//时间:2019年11月15日
//作者:Kroner
//编译环境:VS 2019
//库函数   string.h
//函数原型   char *strlwr(char *s)
//函数功能: 将字符串s中的字符变为小写#pragma warning(disable:4996)
#include "stdlib.h"
#include "stdio.h"
#include "string.h"int main(){char str[] = "ABCDEF";char *strnew = NULL;strnew = strlwr(str);printf_s("strnew = %s", strnew);return 0;}

测试结果:这个函数的测试结果和strupr相反

c语言库函数总结----string.h库相关推荐

  1. c语言库函数总结----stdlib.h库

    思维导图大纲 前言 stdlib .h 头文件定义了四个变量类型.一些宏和各种通用工具函数. double atof(const char *str) 函数原型 double atof(const c ...

  2. string.h库中的memcpy()和memmove()

    memcpy()和memmove()可以处理任意类型的数组. void *memcoy(void * restrict s1, const void * restrict s2, size_t n); ...

  3. SM4密码算法实现(C语言只使用stdio.h库)

    SM4算法分析与实现 目录 SM4算法简介 SM4算法原理 SM4算法实现与设计 完整代码 加密流程图点这里 SM4算法简介 SM4密码算法是一个分组算法.数据分组长度为128比特,密钥长度为128比 ...

  4. C语言字符串库函数 #include <string.h>

    c语言字符串库函数#include<string.h> 在头文件<string.h>中定义了两组字符串函数.第一组函数的名字以str开头:第二组函数的名字以mem开头.只有函数 ...

  5. string类 string.h头文件 cstring头文件区别以及读取一行字符串总结

    以前一直分不清string类  string.h头文件 cstring头文件的去别,今天ce了一发才稍微弄懂了. 首先C语言中只有string.h头文件,string.h包含了一些字符数组和字符串的函 ...

  6. C语言中没有string类型

    C语言中没有string类型 搞懂个事的根本核心是:C语言的数组类型里,唯一和字符串沾边的就只有char型数组了. 所以,理所当然的,我们就会想到用二维字符型数组来建立--把字符串当做数组里的一个元素 ...

  7. C语言常见字符串处理string.h库函数strstr、strchr、strcat、strcmp、strcpy、strlen的介绍

    目录 strstr 声明 返回值 strchar 声明 返回值 strchr和strstr的差别 strcat 声明 返回值 strcmp 声明 返回值 strcpy 声明 返回值 strlen 声明 ...

  8. c语言中的头文件string.h的作用,C语言常用头文件及库函数——string.h

    string.h 函数与形参类型: 函数功能: 返回值: 例子: 1.memcmp 函数与形参类型: int memcmp(buf1,buf2,count); void * buf1, void bu ...

  9. C语言 -- string.h中函数功能详解与手动实现 - 02(常用函数memcpy、memmove、strcpy、strdup、strcat、strtok...)

    内容预览 3.5.搬迁类型 --- 函数功能详细说明 :将内存空间中内容移动.复制到另一内存空间 3.6.搬迁类型 --- 函数功能测试与手动实现 3.6.1.memcpy.memccpy 3.6.2 ...

最新文章

  1. JQuery Mobile 手机显示页面偏小
  2. 前、中、后缀表达式概述及转换+栈的计算器原理及代码分析(含完整源码)
  3. PHP实现多线程抓取网页
  4. Android使用token维持登陆状态的方法
  5. dell服务器报内存配置不正确,DELL 服务器系统提示错误解决的若干办法
  6. Linux 主机信息 总览
  7. Linux合上笔记本不进入休眠模式
  8. 初一辍学学php能行吗_那些初中就辍学的小姑娘现在过得如何了?
  9. bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)
  10. 简析边缘数据中心技术
  11. token会被截取吗_新手剪辑:如何截取视频的某个片段?
  12. 【狂神说Redis】2Redis入门 2-1概述
  13. 转账引发数据一致性思考
  14. 《英雄联盟》捞月狗数据初探
  15. arduino 土壤温湿度传感器_arduino测量土壤湿度自动浇水提醒 - 全文
  16. 凤天赛磁石墨烯植物复合机油
  17. matlab 莫比乌斯带,教师数学论文,关于高等数学教学中运用多媒体手段相关参考文献资料-免费论文范文...
  18. 前端下载 “不支持打开该类型文件或文件已损坏“问题
  19. 种草营销怎么玩?如何借小红书KOL、KOC笔记种草提升转化效果
  20. MAC系统的绝佳看图工具iSmartPhoto_我是亲民_新浪博客

热门文章

  1. 博客粉丝群发功能使用文档
  2. 【2019-总结】初中毕业暑假集训No.6
  3. Word中输入m*n矩阵
  4. LeetCode 665 Java实现
  5. MEMS 惯性传感器 - 参数指标误差介绍
  6. 终于有一款多功能的串口网络中控播放器
  7. 微型计算机B305怎么拆,联想B305一体机怎么拆
  8. android打开手机相册获取真正的图片路径
  9. Latex: \thispagestyle{empty}无法去掉页码
  10. Pygame详解(五):font 模块