关于string.h的笔记

近日在LeetCode上刷题,发现string.h内容忘差不多了,随手记一记(指复制粘贴)

string.h定义的类型

size_t

其实就是个无符号整数(具体类型与编译器实现相关)。同时也是sizeof关键字所返回的类型。

string.h定义的宏

NULL

不用再解释了吧。

#define NULL ((void *)0)

string.h定义的函数

mem系

memchr

void *memchr(const void *str, int c, size_t n)

返回 str 所指向的内存中前 n 个字节里第一次出现的(无符号)字符 c 的指针。


memcmp

int memcmp(const void *str1, const void *str2, size_t n)

比较从 str1 开始的 n 个字节与从 str2 开始的 n 个字节。
(cmp -> compare)


memcpy

void *memcpy(void *dest, const void *src, size_t n)

将以 src 为起点的 n 个字节复制到以 dest 为起点的 n 个字节。


memmove

void *memmove(void *str1, const void *str2, size_t n)

类似memcpy,但更安全。

如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。(来源:菜鸟教程)


memset

void *memset(void *str, int c, size_t n)

设置以 str 为起点,位移 +n 的地址的值为 c。


str系

strcat

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

把src所指向的字符串接到dest所指向的字符串的末尾。
返回一个指向最终的目标字符串 dest 的指针


strncat

char *strncat(char *dest, const char *src, size_t n)

将 scr 所指向的字符串的前 n 个字符复制到 dest 所指向的字符串的末尾。


strchr

char *strchr(const char *str, int c)

搜索 str 所指向的字符串中第一次出现的(无符号)字符 c 并返回其指针。


strcmp

int strcmp(const char *str1, const char *str2)

比较 str1 , str2 两者所指向的字符串的内容。


strncmp

int strncmp(const char *str1, const char *str2, size_t n)

比较 str1 , str2 两者所指向的字符串的内容,但只比较前 n 个字符。


strcoll

int strcoll(const char *str1, const char *str2)

与Localization support有关,暂时无法理解。

把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。


strcpy

char *strcpy(char *dest, const char *src)

将 src 所指向的字符串复制到 dest。


strncpy

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

将 src 所指向的字符串复制到 dest,但只复制前 n 个字符。


strcspn

size_t strcspn(const char *str1, const char *str2)

返回 str1 中第几个字符与 str2 的某一个字符相同。

strerror

char *strerror(int errnum)

起初我不太理解,但看到这行:

C 库函数 char *strerror(int errnum) 从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。strerror 生成的错误字符串取决于开发平台和编译器。(菜鸟教程)

似乎是配合errno.h获取最近的报错描述字符串的。
使用列如下。

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

int main ()
{
    FILE *fp;
    fp = fopen("file.txt","r");

    if( fp == NULL ) 
    {
        printf("Error: %s\n", strerror(errno));
    }
 
    return(0);
}
//输出:Error: No such file or directory

strlen

size_t strlen(const char *str)

返回 str 所指向的字符串的长度(直到但不包括\0)。


strpbrk

char *strpbrk(const char *str1, const char *str2)

依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。


strrchr

char *strrchr(const char *str, int c)

在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。


strspn

size_t strspn(const char *str1, const char *str2)

检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。


strstr

所以这是什么鬼名字

char *strstr(const char *haystack, const char *needle)

在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。


strtok

char *strtok(char *str, const char *delim)

分解字符串 str 为一组字符串,delim 为分隔符。


strxfrm

size_t strxfrm(char *dest, const char *src, size_t n)

也与Localization support有关,还是无法理解。

根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。

string.h中同时包括了memxxx和strxxx函数,很明显,这是因为char既是byte。一般来说,char的二进制占8位,共计1字节。

参考资料

菜鸟教程 : C 标准库 - <string.h>
腾讯云开发者社区开发者手册 : 本地化支持 | Localization support

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值