c语言编程 ——字符串处理和内存操作

头文件

#include <string.h>

字符串的特点

  字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。

  空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。

char site[7] = {'a', 'b', 'c', 'd', 'e', 'f', '\0'};

char site[] = "abcdef";

以上两种定义初始化等价。

字符串操作

计算字符串的长度

strlen()

函数原型

size_t strlen(const char *str)

功能特点
  计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
参考链接:https://www.runoob.com/cprogramming/c-function-strlen.html

字符串拷贝

strcpy()

函数原型

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

功能特点
  把 src 所指向的字符串复制到 dest。该函数返回一个指向最终的目标字符串 dest 的指针

注意:如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况
参考链接:https://www.runoob.com/cprogramming/c-function-strcpy.html

strncpy()

函数原型

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

功能特点
  src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。该函数返回最终复制的字符串。

注意:strncpy 没有自动加上终止符的,需要手动加上。
参考链接:https://www.runoob.com/cprogramming/c-function-strncpy.html

字符串比较

strcmp()

函数原型

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

功能特点
  把str1 所指向的字符串和 str2 所指向的字符串进行比较。

返回值:

  如果返回值小于 0,则表示 str1 小于 str2。
  如果返回值大于 0,则表示 str1 大于 str2。
  如果返回值等于 0,则表示 str1 等于 str2。
参考链接:https://www.runoob.com/cprogramming/c-function-strcmp.html

strncmp()

函数原型

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

功能特点
  把 str1 和 str2 进行比较,最多比较前 n 个字节。

返回值

  如果返回值小于 0,则表示 str1 小于 str2。
  如果返回值大于 0,则表示 str1 大于 str2。
  如果返回值等于 0,则表示 str1 等于 str2。
参考链接:https://www.runoob.com/cprogramming/c-function-strncmp.html

字符串拼接

strcat()

函数原型

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

功能特点
  把 src 所指向的字符串追加到 dest 所指向的字符串的结尾.
注意:dest要有足够大的内存用来保存追加上来的src
参考链接:https://www.runoob.com/cprogramming/c-function-strcat.html

strncat()

函数原型

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

功能特点
  把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
注意:dest要有足够大的内存用来保存追加上来的src
参考链接:https://www.runoob.com/cprogramming/c-function-strncat.html

字符串分割

函数原型

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

功能特点
   分解字符串 str 为一组字符串,其中delim 为分隔符,包含分隔符的 C 字符串. str为要被分解成一组小字符串的字符串。
返回值
   该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。
注意:当str被某一个字符串 如"/"分割时,aa/bb/cc 分割后会变为 aa’\0’bb’\0’cc 输出显示为aa bb cc
参考链接:
https://www.runoob.com/cprogramming/c-function-strtok.html
https://blog.csdn.net/Mylily_123/article/details/78208078

内存操作

内存拷贝

memcpy()

函数原型

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

功能特点
  从存储区 str2 复制 n 个字节到存储区 str1。该函数返回一个指向最终的目标字符串 str1 的指针

注意:当内存发生局部重叠时,可能导致memcpy拷贝的结果是未定义的(取决于编译平台内部对memcpy的优化处理)

memcpy拷贝异常参考链接:https://blog.csdn.net/bajianxiaofendui/article/details/87083090
memcpy拷贝函数参考链接:https://www.runoob.com/cprogramming/c-function-memcpy.html

内存移动拷贝

memmove()

函数原型

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

功能特点
  从 str2 移动复制 n 个字符到 str1,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。str2是多少,str1就为多少。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同,为简单拷贝。
参考链接:https://www.runoob.com/cprogramming/c-function-memmove.html

内存比较

memcmp()

函数原型

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

功能特点
  把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
返回值
  如果返回值 < 0,则表示 str1 小于 str2。
  如果返回值 > 0,则表示 str1 大于 str2。
  如果返回值 = 0,则表示 str1 等于 str2。
参考链接:https://www.runoob.com/cprogramming/c-function-memcmp.html

内存字符填充

memset()

函数原型

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

功能特点
  复制单个字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。memset是按照字节的填充。
参考链接:https://www.runoob.com/cprogramming/c-function-memset.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值