我是靠谱客的博主 朴素猫咪,这篇文章主要介绍【C语言】标准库字符串函数整理,现在分享给大家,希望可以做个参考。

strcmp 字符串比较

函数原型

复制代码
1
2
extern int strcmp(const char *s1,const char *s2);

说明

C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
matlab中函数,strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true ,不同返回false

注意事项

参数s1和s2都不为空。

strncmp 字符串前n个字符比较

函数原型

复制代码
1
2
int strncmp ( const char * str1, const char * str2, size_t n );

说明

str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。

注意事项

参数s1和s2都不为空。

sprintf 格式化字符串

函数原型

复制代码
1
2
int sprintf( char *buffer, const char *format, [ argument] … );

说明

sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。

注意事项

使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。

snprintf 安全格式化字符串

函数原型

复制代码
1
2
int snprintf(char *str, size_t size, const char *format, ...)

参数
str 需要格式化输入的字符串
size 格式化后字符串大小限制

说明

将可变个参数(…)按照format格式化成字符串,然后将其复制到str中
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符(’’);
(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符(’’),返回值为欲写入的字符串长度。。

注意事项

1、要比较的字符包括字符串结束标志’’,而且一旦遇到’’就结束比较,无论n是多少,不再继续比较后边的字符。

2、2个字符串都不为空

sscanf 格式化读取

函数原型

复制代码
1
2
int sscanf( const char *buffer, const char *format, [ argument ] ... );

参数

复制代码
1
2
3
4
5
buffer 存储的数据 format 窗体控件字符串。 有关详细信息,请参阅"格式规范"。 argument 可选自变量 locale  要使用的区域设置

说明

sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
第二个参数可以是一个或多个

复制代码
1
2
{%[*] [width] [{h | I | I64 | L}]type | ' ' | 't' | 'n' | 非%符号}

注:
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
2、 {a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、 width表示读取宽度。
4、 {h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
5、type :这就很多了,就是%s,%d之类。
6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
失败返回0 ,否则返回格式化的参数个数
7、如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。

返回结果

每个函数都将返回成功转换并分配的字段数;
返回值不包括已读取但未分配的字段。 返回值为 0 表示没有分配任何字段。 返回值是EOF是否有错误或如果在第一次转换之前到达字符串结尾。
如果buffer或format是NULL调用指针,无效参数处理程序,如中所述参数验证。 如果允许继续执行,则这些函数返回 -1 并将errno设置为EINVAL。
成功则返回参数数目,失败则返回-1,错误原因存于errno中。
经多次测试[来源请求],在linux系统中成功返回的是成功转换的值的个数,例如:
sscanf(“1 2 3”,"%d %d %d",buf1, buf2, buf3); 成功调用返回值为3,即buf1,buf2,buf3均成功转换。
sscanf(“1 2”,"%d %d %d",buf1, buf2, buf3); 成功调用返回值为2,即只有buf1,buf2成功转换。
(注意:此处buf均为地址)

strcpy 字符串复制

函数原型

复制代码
1
2
3
#include <string.h> char *strcpy(char* dest, const char *src);

说明

复制代码
1
2
3
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

注意事项

复制代码
1
2
3
一:若数组长度不足以容纳整个字符串,则程序运行崩溃。

strncpy 字符串复制

函数原型

复制代码
1
2
char *strncpy(char *dest,char *src,size_t n);

使用实例

复制代码
1
2
3
4
5
6
7
8
9
#include<stdio.h> #include<string.h> int main(){ char name[]={"Chinanet"},dest[20]={}; strncpy(dest,name,3); dest[3]='';//没有会乱码 printf("%sn",dest); }

注意事项
1、该函数不复制’’,要自己在末尾加上
2、

strstr 判断是否为子串

函数原型

复制代码
1
2
Get

URI

复制代码
1
2
/ap1/v1/sysinfo/service

请求参数

  1. 不带参数查询,默认查询出在配置文件中指定的所有服务的信息。
    (配置文件路径:/conf/vanilla/autoload_configs/tools.conf)
  2. 带参数的查询,可以指定查询某个服务的状态信息
  • Get:/api/v1/tools/service?name=tuned

返回结果

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
{ "ret": 2, "data": { "list": [ {"name":"tuned", "status":"active"}, {"name":"firewalld", "status":"inactive"} ] }, "error": null, }

strchr 查找字符首次出现位置

函数原型

复制代码
1
2
char *strchr(char* _Str,char _Ch)

头文件

复制代码
1
2
#include <string.h>

功能

查找字符串_Str中首次出现字符_Val的位置

说明

返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。

strrchr 查找字符最后出现位置

函数原型

复制代码
1
2
char *strrchr(char* _Str,char _Ch)

头文件

复制代码
1
2
#include <string.h>

功能

查找字符串_Str中最后一次出现字符_Val的位置

说明

查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。使用这个地址返回从最后一个字符c到str末尾的字符串。

strtok 在字符串中剔除子串

函数原型

复制代码
1
2
char *strtok(char s[], const char *delim);

头文件

复制代码
1
2
#include <string.h>

功能

分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。

说明

strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针

使用示例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<string.h> #include<stdio.h> int main(void) { char input[16]="abc,d"; char*p; /*strtok places a NULL terminator infront of the token,if found*/ p=strtok(input,","); if(p) printf("%sn",p); /*Asecond call to strtok using a NULL as the first parameter returns a pointer to the character following the token*/ p=strtok(NULL,","); if(p) printf("%sn",p); return 0; }

说明

下面的说明摘自于最新的Linux内核2.6.29,说明了这个函数已经不再使用,由速度更快的strsep()代替

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
/** linux/lib/string.c** Copyright (C) 1991, 1992 Linus Torvalds*//** stupid library routines.. The optimized versions should generally be found    * as inline code in <asm-xx/string.h>    * These are buggy as well..    * * Fri Jun 25 1999, Ingo Oeser <ioe@informatik.tu-chemnitz.de>    * - Added strsep() which will replace strtok() soon (because strsep() is    * reentrant and should be faster). Use only strsep() in new code, please.    ** * Sat Feb 09 2002, Jason Thomas <jason@topic.com.au>,    * Matthew Hawkins <matt@mh.dropbear.id.au>    * - Kissed strtok() goodbye   */ [1]

strcat 字符串拼接

函数原型

复制代码
1
2
char *strcat(char *dest, const char *src);

函数功能

把src所指字符串添加到dest结尾处(覆盖dest结尾处的’’)。

注意事项:

src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针。

strdup 字符串复制

函数原型

复制代码
1
2
3
extern char *strdup(char *s); 头文件:string.h

函数功能

将字符串拷贝到新建的位置处
strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。

注意事项:

不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。

最后

以上就是朴素猫咪最近收集整理的关于【C语言】标准库字符串函数整理的全部内容,更多相关【C语言】标准库字符串函数整理内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部