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

概述

strcmp 字符串比较

函数原型

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个字符比较

函数原型

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 格式化字符串

函数原型

int sprintf( char *buffer, const char *format, [ argument] … );

说明

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

注意事项

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

snprintf 安全格式化字符串

函数原型

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 格式化读取

函数原型

int sscanf(  const char *buffer,  const char *format, [ argument ] ...   ); 

参数

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

说明

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

{%[*] [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 字符串复制

函数原型

#include <string.h> 
char *strcpy(char* dest, const char *src);

说明

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

注意事项

一:若数组长度不足以容纳整个字符串,则程序运行崩溃。

strncpy 字符串复制

函数原型

char *strncpy(char *dest,char *src,size_t n);

使用实例

#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 判断是否为子串

函数原型

Get

URI

/ap1/v1/sysinfo/service

请求参数

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

返回结果

{
    "ret": 2,
    "data":
    {
        "list":
        [
            {"name":"tuned", "status":"active"},
            {"name":"firewalld", "status":"inactive"}
        ]
    },
    "error": null,
}

strchr 查找字符首次出现位置

函数原型

char *strchr(char* _Str,char _Ch)

头文件

#include <string.h>

功能

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

说明

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

strrchr 查找字符最后出现位置

函数原型

char *strrchr(char* _Str,char _Ch)

头文件

#include <string.h>

功能

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

说明

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

strtok 在字符串中剔除子串

函数原型

char *strtok(char s[], const char *delim);

头文件

#include <string.h>

功能

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

说明

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

使用示例

#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()代替

/** 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 字符串拼接

函数原型

char *strcat(char *dest, const char *src);

函数功能

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

注意事项:

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

返回指向dest的指针。

strdup 字符串复制

函数原型

extern char *strdup(char *s);
头文件:string.h

函数功能

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

注意事项:

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

最后

以上就是朴素猫咪为你收集整理的【C语言】标准库字符串函数整理的全部内容,希望文章能够帮你解决【C语言】标准库字符串函数整理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部