strcmp 字符串比较
函数原型
1
2extern 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
2int 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
2int sprintf( char *buffer, const char *format, [ argument] … );
说明
sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。
注意事项
使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。
snprintf 安全格式化字符串
函数原型
1
2int 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
2int sscanf( const char *buffer, const char *format, [ argument ] ... );
参数
1
2
3
4
5buffer 存储的数据 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
2char *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
2Get
URI
1
2/ap1/v1/sysinfo/service
请求参数
- 不带参数查询,默认查询出在配置文件中指定的所有服务的信息。
(配置文件路径:/conf/vanilla/autoload_configs/tools.conf) - 带参数的查询,可以指定查询某个服务的状态信息
- 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
2char *strchr(char* _Str,char _Ch)
头文件
1
2#include <string.h>
功能
查找字符串_Str中首次出现字符_Val的位置
说明
返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。
strrchr 查找字符最后出现位置
函数原型
1
2char *strrchr(char* _Str,char _Ch)
头文件
1
2#include <string.h>
功能
查找字符串_Str中最后一次出现字符_Val的位置
说明
查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。使用这个地址返回从最后一个字符c到str末尾的字符串。
strtok 在字符串中剔除子串
函数原型
1
2char *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
2char *strcat(char *dest, const char *src);
函数功能
把src所指字符串添加到dest结尾处(覆盖dest结尾处的’’)。
注意事项:
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
strdup 字符串复制
函数原型
1
2
3extern char *strdup(char *s); 头文件:string.h
函数功能
将字符串拷贝到新建的位置处
strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。
注意事项:
不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。
最后
以上就是朴素猫咪最近收集整理的关于【C语言】标准库字符串函数整理的全部内容,更多相关【C语言】标准库字符串函数整理内容请搜索靠谱客的其他文章。
发表评论 取消回复