C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)

参考:string.h中常用字符串操作函数说明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)
作者:一只青木呀
发布时间: 2020-09-19 13:57:48
网址:https://blog.csdn.net/weixin_45309916/article/details/108679027

目录

  • 前言
  • 字符串函数大全
  • 字符串函数详解
    • memchr
    • memcmp
    • memcpy
    • memmove
    • memset
    • strcat
    • strchr
    • strcmp
    • strcoll
    • strcpy
    • strcspn
    • strerror
    • strlen
    • strncat
    • strncmp
    • strncpy
    • strpbrk
    • strrchr
    • strspn
    • strstr
    • strtok
    • strxfrm

前言

C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

使用时都需要加上头文件

string.h

字符串函数大全

函数功能
memchr在内存块中定位字符的位置还有相似函数memrchr和rawmemchr
memcmp把两个内存块的内容进行比较。
memcpy复制内存块的内容
memmove移动内存块中的内容
memset以字节方式填充内存块
strcat把一个字符串后追加到另一个字符串后
strchr在字符串中查找一个字符的第一个位置指针
strcmp比较两个字符串(ASCII)
strcoll比较两个字符串(根据指定的 LC_COLLATE)
strcpy复制字符串
strcspn在一个字符串中查找另一个字符串中的第一个出现的字符的位置
strerror解释错误代码
strlen返回字符串长度
strncat把一个字符串的 n 个字符后追加到另一个字符串后
strncmp比较两个字符串的前 n 个字符(ASCII)
strncpy复制字符串中的前 n 个字符
strpbrk查找字符串中第一个出现的属于另一个字符串的任意字符的指针
strrchr查找字符串中一个字符的出现的最后位置
strspn计算字符串的从开头起符合另一个字符串的连续字符个数
strstr在一个字符串中查找另一个字符串
strtok根据指定字符集分割一个字符串
strxfrm根据当前环境转化字符串,将转化后的前 n 个字符复制给另一个字符串

字符串函数详解

memchr

  • 函数原型:
void *memchr(const void *s, int c, size_t n);
  • 功能:在参数 s 所指向的内存块的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置,并返回相应的指针。

  • 返回值:找到返回相应的指针,否则返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>char str[1000], ch, *pch;int main(){gets(str);ch = getchar();//void类型转化成char类型 void也是一种类型pch = (char*) memchr(str, ch, strlen(str));       // memchr 的使用if ( pch != NULL){printf ("%c found at %d.\n", ch, pch - str);//地址减去地址 得到相应的位置}else{printf ("%c not found.\n", ch);}return 0;
}
  • 运行结果:
    在这里插入图片描述

memcmp

  • 函数原型:
int memcmp(const void *s1, const void *s2, size_t n);
  • 功能:memcmp()函数比较内存区域s1和s2的前n个字节(每个都被解释为无符号字符)。

  • 返回值:返回一个指向dest的指针。

返回值意义
大于零ptr1 < ptr2
等于零ptr1 == ptr2
小于零ptr1 > ptr2
  • demo:
#include <stdio.h>
#include <string.h>char s1[20], s2[20];int main(){while(1){gets(s1);gets(s2);int n = memcmp(s1, s2, sizeof(s1));if ( n > 0 ){printf ("'%s' is greater.n is %d\n", s1,n);}else if( n == 0 ){printf ("'%s' is the same as '%s'.   n is %d\n", s1, s2,n);}else{printf ("'%s' is greater.n is %d\n", s2,n);}memset(s1,0,sizeof(s1));memset(s2,0,sizeof(s2));}return 0;
}
  • 运行结果

在这里插入图片描述

memcpy

  • 函数原型:
void *memcpy(void *dest, const void *src, size_t n);
  • 函数功能:从内存区src复制n个字节到内存区dest。内存区不能重叠。只会覆盖。

  • 返回值:返回一个指向dest的指针。

  • demo:

#include <string.h>
#include <stdio.h>char s1[] = "abcdefg", s2[100]={'0'};int main()
{memcpy(s2, s1, strlen(s1) + 1);printf (" s2 is '%s'.\n", s2);return 0;
}
  • 运行结果
    在这里插入图片描述

memmove

  • 函数原型:
void *memmove(void *dest, const void *src, size_t n);
  • 函数功能:memmove()函数将n个字节从内存区域src拷贝到内存区域dest。这些内存区域可能重叠:复制发生在
    虽然src中的字节首先被复制到一个不重叠src或dest的临时数组中,然后到dest的临时数组。

  • 返回值:返回一个指向dest的指针。

  • demo

//去掉了字符串前面的 4 个空格。
#include <stdio.h>
#include <string.h>char s[] = "    too space";int main(){memcpy(s, s+4, strlen(s+4)+1);printf ("s is '%s'.\n",s);return 0;
}
  • 运行结果

在这里插入图片描述

memset

  • 函数原型
void *memset(void *s, int c, size_t n);
  • 函数功能:用常量字节c填充s指向的内存区域的前n个字节。

  • 返回值:返回一个指向内存区域s的指针。

  • demo

#include <stdio.h>
#include <string.h>char str[] = "hello world!";int main(){memset(str, '-', strlen(str));puts(str);return 0;
}
  • 运行效果

在这里插入图片描述

strcat

  • 函数原型:
char * strcat ( char * des, const char * src );
  • 函数功能:将 src 中的内容追加到 des中。

  • 返回值:返回 des指针。

  • demo:

#include <stdio.h>
#include <string.h>char s1[] = "hello ", s2[] = "world!";int main(){strcat(s1,s2);puts(s1);return 0;
}
  • 运行结果

在这里插入图片描述

strchr

  • 函数原型:
char *strchr(const char *s, int c);
  • 函数功能:返回 s中的 c出现的第一个位置的指针。

  • 返回值:如果找到,返回 s中的 c出现的第一个位置的指针;否则返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>char str[] = "hello world!", ch = 'o';int main(){char *pch = strchr(str, ch);if ( pch != NULL){printf (" '%c' is found at %d.\n", ch, pch - str);}else{printf ("'%c' is not found.\n", ch);}return 0;
}
  • 运行效果

在这里插入图片描述

strcmp

  • 函数原型:
 int strcmp(const char *s1, const char *s2);
  • 功能:比较字符串 str1 和 str2 的字典序大小(ASCII)。

  • 返回值:

返回值意义
小于零str1 < str2
等于零str1 == str2
大于零str1 > str2
  • demo:
#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[] = "abcdfgh";int main(){int n = strcmp(s1, s2);if ( n > 0 ){printf ("\"%s\" is greater.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\".\n", s1, s2);}else{printf ("\"%s\" is greater.\n", s2);}return 0;
}
  • 运行效果
    在这里插入图片描述

strcoll

  • 函数原型:
 int strcoll(const char *s1, const char *s2);
  • 功能:默认情况下(LC_COLLATE 为 “POSIX” 或 “C” )和 strcmp 一样根据 ASCII 比较字符串大小。对于设置了 LC_COLLATE 语言环境的情况下,则根据 LC_COLLATE 设置的语言排序方式进行比较。例如:汉字,根据拼音进行比较

  • 返回值:

返回值意义
小于零str1 < str2
等于零str1 == str2
大于零str1 > str2
  • demo:
#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[] = "abcdfgh";int main(){int n = strcoll(s1, s2);if ( n > 0 ){printf ("\"%s\" is greater.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\".\n", s1, s2);}else{printf ("\"%s\" is greater.n\n", s2);}return 0;
}
  • 运行结果
    在这里插入图片描述

strcpy

  • 函数原型:
char *strcpy(char *dest, const char *src);
  • 功能:将 src的内容复制给 des,需要保证 des足够容纳 src的空间

  • 返回值: 返回 des。

  • demo:

#include <stdio.h>
#include <string.h>char s1[] = "abcdefg", s2[100];int main(){strcpy(s2, s1);printf ("s2 is '%s'.\n", s2);return 0;
}
  • 运行效果

在这里插入图片描述

strcspn

  • 函数原型:
size_t strspn(const char *s, const char *accept);
  • 功能:返回 s 中出现的第一个属于 accept 的字符的位置。

  • 返回值: 如果找到返回字符位置,否则返回字符串长度。

  • demo:

#include <stdio.h>
#include <string.h>int main(){int pos = strcspn("qwert1234des","0123456789");printf("%d\n", pos);return 0;
}
  • 运行结果:
    在这里插入图片描述

strerror

  • 函数原型:
char * strerror ( int errnum );
  • 函数功能:给出错误代码 errnum 的描述内容。

  • 返回值:返回描述错误内容的字符串指针。

  • demo:

#include <stdio.h>
#include <string.h>
#include <errno.h>int main(){FILE *f = fopen("unexist.file", "r");if( f == NULL ){printf ("Error: %s\n",strerror(errno));}return 0;
}

在这里插入图片描述

strlen

  • 函数原型:
size_t strlen ( const char * str );
  • 函数功能:返回字符串 str 的长度。

  • 返回值:返回字符串 str 的长度。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[] = "hello world!";printf("%d\n", strlen(a));return 0;
}

在这里插入图片描述

strncat

  • 函数原型:
char * strncat ( char * destination, const char * source, size_t num );
  • 函数功能:将 source 中的前 num 个字符串追加到 destination 后。

  • 返回值:返回追加后的 destination 指针。

  • demo:

#include <stdio.h>
#include <string.h>char s1[] = "hello ", s2[] = "world! -----";int main(){strncat(s1, s2, 6);puts(s1);return 0;
}

在这里插入图片描述

strncmp

  • 函数原型:
int strncmp ( const char * str1, const char * str2, size_t num );
  • 函数功能:比较 str1 中的前 num 个字符和 str2 中 的前 num 个字符的大小。

  • 返回值:

返回值意义
小于零str1 < str2
等于零str1 == str2
大于零str1 > str2
  • demo
#include <stdio.h>
#include <string.h>char s1[] = "abcdfgh", s2[] = "abcdefg";int main(){int n = strncmp(s1, s2, 4);if ( n > 0 ){printf ("\"%s\" is greater in the first 4.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\" in the first 4.\n", s1, s2);}else{printf ("\"%s\" is greater in the first 4.\n", s2);}return 0;
}

在这里插入图片描述

strncpy

  • 函数原型:
char * strncpy ( char * destination, const char * source, size_t num );
  • 函数功能:将 source 中的前 num 个字符复制给 destination。如果 source 的长度大于 num,不会自动追加 \0。若小于,则会填充\0,直到长度为 num。

  • 返回值:返回 destination 的指针。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[1000], b[1000] = "hello world!";strncpy(a, b, 5);       //不会自动补 NULLa[5] = '\0';puts(a);return 0;
}

在这里插入图片描述

strpbrk

  • 函数原型:
char * strpbrk ( char * str1, const char * str2 );
  • 函数功能:查找字符串 str1 中第一个出现的属于字符串 str2 中的任意字符的指针。

  • 返回值:返回字符串 str1 中第一个出现的属于字符串 str2 中的任意字符的指针。若没找到,返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[] = "This is a test.", b[] = "aeiou";char *pch  = strpbrk(a, b);printf("%d\n", pch - a);return 0;
}

在这里插入图片描述

strrchr

  • 函数原型:
char * strrchr ( char * str, int character );
  • 函数功能:在字符串中 str 查找最后一个 character 的指针位置。

  • 返回值:如果找到,在字符串中 str 查找最后一个 character 的指针位置。否则返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>char str[] = "hello world!", ch = 'o';int main(){char *pch = strrchr(str, ch);if ( pch != NULL ){printf ("'%c' is found at %d.\n", ch, pch - str);}else{printf ("'%c' is not found.\n", ch);}return 0;
}

在这里插入图片描述

strspn

  • 函数原型:
size_t strspn ( const char * str1, const char * str2 );
  • 函数功能: 计算 str1 字符串从开头开始的连续字符,且这些字符都完全是 str2 所指字符串中的字符。

  • 返回值:返回字符的个数。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[] = "aaaaauuuuuxxxsada", b[] = "aeiou";int n = strspn(a, b);printf("%d\n", n);    //输出为10,满足条件的字符串为aaaaauuuuu。return 0;
}

在这里插入图片描述

strstr

  • 函数原型:
const char * strstr ( const char * str1, const char * str2 )
char * strstr ( char * str1, const char * str2 )
  • 函数功能:查找字符串 str1 中首次出现字符串 str2 的位置。

  • 返回值:返回 str1 中首次出现 str2 的位置的指针,如果 str1 中不存在 str2 则返回 NULL。

  • demo:

#include <stdio.h>
#include <string.h>int main(){char a[] = "hello world!", b[] = "world";char *pch = strstr(a, b);printf("%d\n", pch - a);return 0;
}

在这里插入图片描述

strtok

  • 函数原型:
char * strtok ( char * str, const char * delimiters );
  • 函数功能:根据 delimiters 指定的内容进行分割。第一次需传入待分割的字符串 str 指针,之后的调用传入 NULL 即可。

  • 返回值:返回指向分割后相应的片段的指针。

  • demo:

#include <stdio.h>
#include <string.h>char str[] ="- This is a sample string.";int main (){char *pch = strtok(str, " .-,");while( pch != NULL){printf("%s\n", pch);pch = strtok(NULL, " .-,");}return 0;
}

在这里插入图片描述

strxfrm

  • 函数原型:
size_t strxfrm ( char * destination, const char * source, size_t num );
  • 函数功能说明:根据当前环境(由LC_COLLATE所指定)转化 source 字符串,并将前 num 个字符复制给 destination。

  • 返回值:返回转换后的字符串的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

位运算(按位与、按位或、异或、取反)以及原码、反码、补码

参考&#xff1a;运算符的计算&#xff08;按位与 按位或 异或 取反&#xff09; 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-07-23 18:13:55 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107543919 参考&#xff1a;计算机原码&#…

Docker03 Docker基础知识、Docker实战

1 Docker基础知识 1.1 什么是Docker Docker是一个可以装应用的容器&#xff0c;就像杯子可以装水、书包可以装书一样&#xff1b;docker官网 Docker是Docker公司开发的&#xff0c;并开源到GitHub上; Docker是跨平台的&#xff0c;支持windows、linux、Macos 1.2 Docker思想 1.…

Linux网络编程小知识(字节序、IP格式、函数、子网掩码、DNS域名解析代码实现)

参考&#xff1a;网络编程前的一些小知识–Linux笔记 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2021-04-12 23:19:10 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/115560197 参考&#xff1a;DNS域名解析 作者&#xff1a;一只青木呀 发布…

ARM汇编基础详解(PS学习汇编的原因)

目录前言1.GNU 汇编语法2.Cortex-A7 常用汇编指令2.1 处理器内部数据传输指令&#xff08;内部寄存器数据非内存数据&#xff09;2.2 存储器访问指令&#xff08;RAM&#xff09;2.3 压栈和出栈指令&#xff08;了解&#xff09;2.4 跳转指令2.5 算术运算指令2.6 逻辑运算指令前…

ARM(IMX6U)裸机汇编LED驱动实验——驱动编写、编译链接起始地址、烧写bin文件到SD卡中并运行

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机汇编LED驱动实验–驱动编写 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-07 09:13:48 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107851318 参考&#xff1a;Linux之…

java 面试 概率论_编程培训-115个Java面试题和答案B.pdf

编程培训-115个Java面试题和答案B.pdf “玩转”Java系列 1 题目115个Java面试题和答案终极(下) 第一篇讨论了面向对象编程和它的特点&#xff0c;关于Java和它的功能的常见问题&#xff0c;Java的集合类&#xff0c; 垃圾收集器&#xff0c;本章主要讨论异常处理&#xff0c;Ja…

ARM(IMX6U)裸机之I.MX6ULL硬件启动方式的选择

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机之I.MX6ULL启动方式详解 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-09 16:32:07 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107891591 目录启动方式的选择①.串行下…

python 操作mongo

1.  导包&#xff1a; import pymongo 2.  建立连接 client pymongo.MongoClient("127.0.0.1",27017) 3.  获取数据库 db client["test1"] 4.  获取集合 col db["t2"] 5.  插入数据&#xff1a; col.insert_one({ name:aa , age:2 …

ARM(IMX6U)裸机之I.MX6ULL启动头文件详解(内部BOOT ROM、IVT + Boot data + DCD + led.bin)

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机之I.MX6ULL镜像烧写以及启动头文件的详解 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-09 17:10:00 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107895975 目录BOOT R…

(转)git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...

对于git的提交一直很小心翼翼&#xff0c;感觉一不小心就会踩到莫名的坑。 这不&#xff0c; 某天commit 就遇到了On branch master nothing to commit (working directory clean) 一查意思。你的分支很干净&#xff1f; 干净&#xff1f;excuse me&#xff1f; 然后git push …

ARM(IMX6U)裸机C语言版本LED驱动实验(汇编进入处理器SVC模式、SP堆内存、跳转main函数、链接起始地址)

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机C语言LED驱动实验–驱动编写,编译 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-11 11:20:17 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107930284 目录0.简介①、汇编…

IBM TS3200 Drive故障处理方案

一、故障定位1.1.故障信息截图摘要1.2.故障定位通过网线连接带库&#xff0c;进入Web管理模式从右边告警得到信息&#xff1a;Drive Broken Code :F3 02 SCD:5 ; Exception F3 52 –Error 经第二张图片定位&#xff0c;确认Drive 2故障需要更换一块Drive 模块此部件支持热插拔&…

链接脚本的编写( 起始地址、text、data、__bss_start、__bss_end、dis反汇编验证)

目录链接脚本的简介以及简单编写编写本试验的链接脚本链接脚本的简介以及简单编写 链接脚本描述了要链接的文件&#xff0c;以及链接顺序、链接首地址。 在博文ARM&#xff08;IMX6U&#xff09;裸机C语言版本LED驱动实验中&#xff0c;我们在编译过程中使用Makefile 来链接代…

java 无法加载资源,JavaScript:无法加载资源:服务器响应状态为404(未找到)

我处理 JavaScript 应用程序&#xff0c;该应用程序在 https://localhost:63342/WalletClient/index.html_ijtk4ock08pqsve8hb7b2b34ou3h5 的localhost地址中打开 . 看起来像这样&#xff0c;单击余额按钮时&#xff0c;它应执行以下 Ajax GET 请求并尝试打开新页面 balance.ht…

ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机模仿STM32驱动开发格式 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-15 12:11:56 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108019447 目录0.外设结构体抽象思路1.模…

ARM(IMX6U)裸机官方SDK包使用

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机C语言LED驱动实验–驱动编写,编译 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-11 11:20:17 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107930284 目录1、I.MX6ULL 官…

Leaflet中添加的不同图层样式图标

如上图&#xff0c;具体问题请查看对应html页引用的basemaps的css样式。 如下图是本项目引用的css样式&#xff1a; .basemap img { width: 48px; border: 2px solid #FFF; margin: 0 2px; /*border-radius: 40px;*/ box-shadow: 0 1px 5px rgba(0,0,0,0.65)} 当css样式中的bor…

ARM(IMX6U)BSP工程文件管理(分文件编程)

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;BSP工程管理实验 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-15 23:41:37 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108028093 目录1、工程管理简介1.1、创建bsp、imx6…

php图片视频,PHP中使用php5-ffmpeg撷取视频图片实例

前几天在玩 FFmpeg 的时后&#xff0c;突然发现 Ubuntu 上多了 php5-ffmpeg 这个扩充套件&#xff0c;就想来玩玩看&#xff0c;看好不好用&#xff0c;有两个结论&#xff1a;读取影片取决于 FFmpeg 的支援性&#xff0c;如果想要什么格式都支援的话&#xff0c;建议自己重新编…

ARM(IMX6U)裸机C语言蜂鸣器驱动实验(BSP+SDK)

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机C语言蜂鸣器驱动实验–驱动编写,编译 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-16 14:47:23 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108032168 目录1、有源蜂鸣…