Linux C函数库之字符串处理函数

本文详细介绍了C语言中的几个内存操作函数,包括bcmp、bcopy、bzero、ffs、index、memccpy、memchr、memcmp、memcpy、memmove、memset,以及它们的功能、使用方法和示例。这些函数主要用于比较、拷贝、查找和填充内存区域,对于理解和操作内存具有重要意义。

bcmp(比较内存内容)

表头文件:

#include <string.h>

定义函数:

int bcmp(const void *s1, const void *s2, int n);

功能说明:

bcmp()用来比较s1和s2所指的内存区间前n个字节,若n为0,则返回0。建议用memcmp取代

bcopy(拷贝内存内容)

表头文件:

#include <string.h>

定义函数:

int bcopy(const void *src, void *dest, int n);

功能说明:

bcopy()和memcopy()一样都是用来拷贝src所指的内存内容的前n个字节到dest所指的地址,不过,参数src和dest在传给函数时是相反的未知。建议用memcopy()取代

bzero(将一段内存内容全部清零)

表头文件:

#include <string.h>

定义函数:

int bzero(void *s, int n);

功能说明:

bzero()会将参数s所指的内存区域的前n个字节全部设置为0,相当于memset()。建议用memset取代

ffs(在一个整型数中查找第一个值为真的位)

表头文件:

#include <string.h>

定义函数:

int ffs(int i);

功能说明:

ffs()会由低位至高位判断参数i字节中的每一位,将最先出现位的真(1)的位置返回。若返回0,即表示没有一个位的值为真,该字节值为零。

index(查找字符串中第一个出现的指定字符)

表头文件:

#include <string.h>

定义函数:

char *index(const char *s, int c);

功能说明:

index()用来找出参数s 字符串中第一个出现的参数c 地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。

memccpy(拷贝内存内容)

表头文件:

#include <string.h>

定义函数:

int memccpy(void *dest, const void *src, int c, size_t n);

功能说明:

memccpy()用来拷贝src所指的内存内容的前n个字节到dest所指的地址,与memcopy不同的是,memccpy会在复制的时候检查参数c是都出现,若是,则返回dest中值为c的下一个字节地址。返回值为0,则表示在src的前n个字节中没有值为c的字符。

memchr(在某一内存范围中查找一特定的值)

表头文件:

#include <string.h>

定义函数:

int memchr(const void *s, int c, size_t n);

功能说明:

从头开始搜索s所指的内存内容前n个字节,直到发现第一个值为c的字节,则返回指向该字节的指针。否则返回0。

memcmp(比较内存内容)

表头文件:

#include <string.h>

定义函数:

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

功能说明:

用来比较str1和str2所指的内存区间的前n个字节。字符串大小的比较是以ASCII码表上的顺序来决定的,此顺序亦为字符的值。memcmp首先将str1第一个字符值减去str2的第一个字符值,若差为0则呼吸音不坏选土匪组反映,若差不为0,则将差值返回。

示例代码:

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

int main()
{
      char str1[15];
      char str2[15];
      int ret;

      memcpy(str1, "abcdef", 6);
      memcpy(str2, "ABCDEF", 6);

      ret = memcmp(str1, str2, 5);

      printf("ret = %d", ret);

      return (0);
}

结果展示:

ret = 1

memcpy(拷贝内存内容)

表头文件:

#include <string.h>

定义函数:

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

功能说明:

用来拷贝src所指的内存前n个字节到dest所指的内存上。与strcpy不同的是,memcpy会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束。该函数的返回值为指向dest的指针。

示例代码:

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

int main()
{
      const char src[50] = "Hello world!\nhahaha";
      char dest[50];

      memcpy(dest, src, strlen(src) + 1);
      printf("dest = %s\n", dest);

      return (0);
}

结果展示:

dest = Hello world!
hahaha

memmove(拷贝内存内容)

表头文件:

#include <string.h>

定义函数:

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

功能说明:

与memcpy不同的是,当src和dest所指的内存区域重叠时,memmove仍然可以正确地处理,不过执行效率会比使用memcpy慢一些。

memset(将一段内存空间填入某值)

表头文件:

#include <string.h>

定义函数:

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

功能说明:

将参数str所指的内存区域的前n个字节以参数c填入,然后返回指向s的指针。常用于某一数组的初始化。

示例代码:

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

int main()
{
      char str[50] = "Hello world!\0hahaha";

      memset(str, 'c', sizeof(str));
      printf("str = %s\n", str);

      return (0);
}

结果展示:

str = cccccccccccccccccccccccccccccccccccccccccccccccccc

 

strcasecmp(忽略大小写比较字符串)

表头文件:

#include <string.h>

定义函数:

int strcasecmp(const char *s1, const char *s2)

功能说明:

用来比较s1和s2字符串,比较时自动忽略大小写的差异。

strcat(连接两个字符串)

表头文件:

#include <string.h>

定义函数:

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

功能说明:

将参数src字符串拷贝到参数dest所指的字符串的末尾。注意,使用该函数时,dest参数要有足够的空间来容纳src所指的内容。返回值为dest所指空间的首地址。

示例代码:

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

int main()
{
      char src[50], dest[50];

      strcpy(src, "This is source");
      strcpy(dest, "This is destination");

      strcat(dest, src);

      printf("最终的目标字符串: |%s|", dest);

      return (0);
}

结果展示:

最终的目标字符串: |This is destinationThis is source|

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值