字符操作

本文详细介绍了C语言中常用的字符串操作函数,包括初始化、取长度、拷贝、连接、比较及搜索等基本操作,并提供了各函数的功能说明及使用注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.初始化。
  void *memset( void *s, int c, size_t n)
头文件:#include <string.h>
功能:把s所指的内存地址开始的n个字节填充为c的值。对于char buf[10],这样的声明,如果它是全局变量或者是静态变量,则自动初始化为0,如果是函数的局部变量初值就不确定,可以用memset(buf,0,10)清零;用malloc分配的内存初值也不是确定的,也要清零。


2.取长度
  size_t strlen( const char *s)
头文件:#include <string.h>
功能:返回s所指的字符串的长度。第一个字符开始找'\0'字符,一旦找到就返回,长度不包括'\0'。char buf[]="hello",strlen(buf)返回5,如果定义char buf[5] = "hello"的话,strlen(buf)是危险的,因为buf里没有存'\0'字符,会造成越界。


3.拷贝
  extern char * strcpy(char *dest, const char *src)
头文件:#include <string.h>
功能:把从src地址开始且含有'\0'结束符的字符串赋值到以dest开始的地址空间。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
  void memcpy(void *dest, const void *src, size_t n)
  void memmove(void *dest, const void *src, size_t n)
头文件:#include <string.h>
功能:memcpy函数从src所指的内存地址拷贝n个字节到dest所指的内存址,和strncpy不同,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节。src和dest内存敬意不能重叠。
memmove也是从src所指的内存地址拷贝n个字节到dest所指的内存地址。虽然叫move但依然是拷贝而且移动。但是和memcpy不同的是src和dest可以重叠。
补充: char *strdup( const char *s)
头文件:#include<string.h>
这个函数调用malloc动态分配内存,把字符串s拷贝到新分配的内存中然后返回。用这个函数省去了事先为新字符串分配内存的麻烦,但是用完之后一定要记得调用free释放新字符串的内存。


4.连接
  char *strcat( char *dest, const char *src)
  char *strncat( char *dest, const char *src, size_t n)
头文件:#include<string.h>
功能:把dest的字符串连接上src字符串,返回dest地址。
注意:strcat和strcpy一样,要确保dest缓冲区足够大,否则会导致缓冲区溢出错误。


5.比较
  int memcmp( const void *s1, const void *s2, size_t n);
  int strcmp( const char *s1, const char *s2);
  int strncmp(const char *s1, const char *s2, size_t n);
头文件:#include<string.h>
返回:负值表示s1<s2,0表示s1=s2,正值表示s1>s2
功能:memcmp从前到后逐个比较缓冲区s1和s2的前n个字节(不管里面有没有'\0')
strcmp把s1和s2当字符串比较,其中一个字符串遇到'\0'时结束。


6.搜索
  #include<string.h>
  char *strchr( const char *s, int c);
  char *strrchr( const char *s, int c);
返回值:如果找到字符c,返回字符串s中指向字符c的指针,如果找不到返回NULL
功能:strchr在字符串s中从前到后查找字符c,找到字符c第一次出现的位置就返回。
  #include<string.h>
  char *strstr( const char *haystack, const char *needle);
功能:在haystack里搜needle串。


7.分割
  #include<string.h>
  char *strtok(char *str, const char *delim);
  char *strtok_r(char *str, const char *delim, char **saveptr);
返回:返回指向下一个Token的指针,如果没有下一个Token了就返回NULL。
功能:把str中用delim分隔符分开成,delim可以是一个或者几个。
注意:空字符串被Token忽略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值