Linux中的字符串和字节序列处理函数

花了两天的时间总结了Linux编程时的字符串操作函数和字节序列操作函数,以便后续查阅。这些函数大都不会去检查传入的参数是否为NULL,因此在使用之前要自己做检查,否则后果你懂的。一个基本知识点: 字符串处理中,如strcpy,字符串都是以’\0’来判断结束的。 字节序列处理中,如memcpy,操作内存字节,不在乎’\0’或其他字符。下列函数基本都包含在头文件string.h中,如果...
摘要由CSDN通过智能技术生成

花了两天的时间总结了Linux编程时的字符串操作函数和字节序列操作函数,以便后续查阅。

这些函数大都不会去检查传入的参数是否为NULL,因此在使用之前要自己做检查,否则后果你懂的。

一个基本知识点:
字符串处理中,如strcpy,字符串都是以’\0’来判断结束的。
字节序列处理中,如memcpy,操作内存字节,不在乎’\0’或其他字符。

下列函数基本都包含在头文件string.h中,如果不是会特别指出。

#include <string.h>


下面开始介绍,给出函数定义并解释作用和用法。

strlen

size_t strlen(const char *s);

计算字符串长度(不包括’\0’)。

strnlen

#define _GNU_SOURCE
size_t strnlen(const char *s, size_t maxlen);

计算字符串长度(不包括’\0’)。但如果字符串长度超过maxlen,返回maxlen。

strcpy

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

字符串拷贝,将src指向的字符串内容拷贝到dest,拷贝到’\0’为止(包含’\0’)。如果src的字符串长度超过dest提供的空间,则结果不可预期,例如可能发生栈溢出或者覆盖其他变量内容等。

strncpy

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

作用同strcpy,拷贝到’\0’为止,最多拷贝n个字符(不计’\0’)。即,如果strlen(src) < n,则拷贝src后,dest剩余字节都用’\0’填充;如果strlen(src) >= n,则只拷贝n个字符,并且这时需要注意的是,dest就没有地方放’\0’了,因此我们在拷贝n字符时,给dest定义的大小为n+1字节。
另外,strncpy的效率肯定比strcpy低,如果注重效率问题,可以在保证不会越界的前提下使用strcpy。

memcpy

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

将src指向的内存的前n字节拷贝到dest。不能处理src和dest内存有重叠的情况。函数返回指向dest的指针。

bcopy

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

该函数类似memcpy,但是src和dest的参数位置不同,能够处理内存区域重叠的情况。已经deprecated,不要用了。

memmove

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

将src指向的内存的前n字节拷贝到dest。能够处理src和dest内存有重叠的情况。函数返回指向dest的指针。

memccpy

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

从src拷贝n字节到dest,但是碰到字符c就停止(c会拷贝到dest),函数返回dest中字符c后面的位置的指针,如果在src的n个字节内没有找到c,则返回NULL。

strdup

char *strdup(const char *s);

复制一份字符串s。在函数里面会有malloc操作来为新字符串申请空间,然后拷贝字符串s(包括’\0’)到新字符串。该函数返回新字符串的指针,如果无法申请到内存,则返回NULL(errno=ENOMEM)。
因为有malloc,因此,在用完新字符串指针后,要记得free()掉。

strndup

char *strndup(const char *s, size_t n);

同strdup,最多拷贝n个字符,如果strlen(s)>=n,则新字符串后面会再补一个’\0’。

strdupa,strndupa

char *
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值