C语言 --<string.h>函数库

604 阅读3分钟

内存管理函数

Name comment
void * memset(void * dest, int c, size_t n) 将一段内存空间填上某值
void * memcpy(void * dest, const void * src, size_t n) 复制一段内存内容
int memcmp(const void * s1, const void * s2, size_t n) 比较两段内存内容
void * memchr(const void * s, int c, size_t n) 在某一段内存范围中查找特定字节
  • :memcmp()返回值
    如果返回值 < 0,则表示 str1 小于 str2。
    如果返回值 > 0,则表示 str1 大于 str2。
    如果返回值 = 0,则表示 str1 等于 str2。

  • 实操


#include <stdio.h>
#include <string.h>

int main ()
{
    char str[20];
    char str1[5] = "ok";
    char str2[5] = "hl";
    strcpy(str,"hello world");
    puts(str);

    memset(str,'0',4);//str内存地址 0为填充数字 4为要填充的字节数
    puts(str);
    memcpy(str,str1,2);//str1为要被复制的字符串,2位被复制的字节数
    puts(str);
    int i=memcmp(str1,str2,2);//2表示要比较的字节数
    printf("%d\n",i);
    char *s = (char *) memchr(str,'w',strlen(str));//str为要被搜索的内存地址,'w'为要被搜索的字符,strlen(str)为搜索的字节数
    printf("%s",s);
    return 0;
}

常用字符串操作

Name comment
char * strcat(char * deat, const char * src) 连接两个字符串
char * strcpy(char * dest, const char * src) 复制字符串
int strcmp(const char * s1, const char * s2) 比较两个字符串
size_t strlen(const char * s) 获取一个字符串的长度
char * strtok(char * s1, const char * s2) 分割字符串
  • :strcat()与strcpy()返回值都是返回字符串指针,且都是保存在第一个参数当中
  • strcmp()返回值
    当s1<s2时,返回为负数;
    当s1=s2时,返回值= 0;
    当s1>s2时,返回正数
  • strtok()返回值为字符串指针
  • 实操
#include <string.h>
#include <stdio.h>

int main () {
    char str[20] = "hello-world-hh";
    const char s[2] = "-";
    char *token;

    /* 获取第一个子字符串 */
    token = strtok(str, s);

    /* 继续获取其他的子字符串 */
    while( token != NULL ) {
        printf( "%s\n", token );

        token = strtok(NULL, s);//首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL
    }

    return(0);
}

字符串查找

Name comment
char * strchr(const char * s, int c) 正向查找一个字符
char * strrchr(const char * s, int c) 反向查找一个字符
char * strstr(const char * s1, const char * s2) 查找一个字符串
char * strpbrk(const char * s1, const char * s2 查找一个字符集合
  • 注: strstr为字符串,strpbrk为字符集合
  • 返回值
    strchr()返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针
    strrchr():查找一个字符c在另一个字符串str中末次出现的位置,并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。
    strstr:从第一个参数中查找第二个字符串参数,如果查到返回那个参数的指针。否则,返回NULL。
    strpbrk:依次检验字符串s1中的字符,当被检验字符在字符串s2中也包含时,则停止检验,并返回该字符位置,空字符null不包括在内。
  • 实操
#include <stdio.h>
#include <string.h>

int main()
{
    const char *str = "helloworld";
    //查找一个字符
    char *chr_result = strchr(str, 'l');
    //查找从右边开始的第一个字符
    char *rchr_result = strrchr(str, 'l');
    printf("chr_result is %s\n", chr_result);
    printf("rchr_result is %s\n", rchr_result);
    //查找任何几个字符
    char *pbrk_result = strpbrk(str, "abcl");
    printf("pbrk_result is %s\n", pbrk_result);
    //查找一个子串
    char *str_result = strstr(str, "lo");
    printf("str_result is %s\n", str_result);
    return 0;
}
运行结果:
chr_result is lloworld
rchr_result is ld
pbrk_result is lloworld
str_result is loworld