经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
字符串函数 - ding-ding-light
来源:cnblogs  作者:ding-ding-light  时间:2020/12/8 9:10:12  对本文有异议

strstr

函数功能:在一字符串中查找指定的字符串)
头 文 件: #include <string.h>
定义函数: char *strstr(const char *haystack, const char * needle);
参数分析:haystack --> 需要搜查的字符串 (被动 家里)
needle --> 需要查找的内容 (主动 毒品)
返 回 值:成功 返回指定字符串第一次出现的地址 失败 返回 0

  1. char str1[] = "Hello Even&GZ2075";
  2. char *str2;
  3. str2 = strstr(str1, "ven");
  4. printf("%s\n", str3);
  5. 输出:ven&GZ2075

strlen

函数功能:返回字符串长度,不包括'\0'
头 文 件: #include <string.h>
定义函数: size_t strlen (const char *s);
参数分析:s --> 需要求长度的字符串,不包括结束字符"\0"
返 回 值:返回字符串 s 的字符数

  1. printf("%ld\n", strlen("ven&GZ2075"));
  2. 输出:10

strtok

函数功能:分割字符串
头 文 件:#include <string.h>
定义函数:char * strtok(char *s, const char *delim);
参数分析:s --> 需要分割的字符串 delim --> 分割字符(用什么符号作为分割标记)可以有多个字符
返 回 值:成功 返回下一个分割后的字符串指针 如果已无从分割则返回 NULL

strcat,strncat

函数功能:连接两字符串,推荐使用strncat可以控制拼接的长度,避免越界/非法访问。
头 文 件: #include <string.h>
定义函数: char *strcat (char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);
参数分析:dest --> 目标地址 src --> 需要拷贝的字符串 n --> 期望连接的长度
返 回 值:返回参数 dest 的字符串起始地址

  1. char str[8] = "Hello" ;//指针STR 指向数据段中的常量区     
  2. char * p ="GZ2075";    
  3. strncat(str , p , sizeof(str)-strlen(str)-1); //可以使用 = 数组大小-实际已经使用的-1,-1是为了存'\0'
  4. printf("%s\n" , str);
  5. 输出:HelloGZ

注意:
无论如何字符串的末尾都应该以'\0'结尾。

strcpy / strncpy

函数功能:拷贝字符串
头 文 件:#include <string.h>
定义函数:char *strcpy(char *dest, const char *src);
char * strncpy(char *dest, const char *src, size_t n);
参数分析:dest --> 目标地址 src --> 需要拷贝的字符串的路径 n --> 期望拷贝的数大小
返 回 值:成功 返回参数 dest 的字符串起始地址

  1. char str[32] = "Hello&Even&GZ2075" ; // 指针STR 指向数据段中的常量区
  2. char * str_1 = calloc( 1 , 32 );
  3. //str_1="Hello&Even&GZ2075"; // 错误,语法没问题,但是逻辑上不对,当前改变了STR1的指向 堆内存的入口地址被你搞丢了
  4. strncpy(str_1,"Hello&Even&GZ2075",32 );//把"Hello&Even&GZ2075" 拷贝到str_1中(堆空间)
  5. printf("str_1:%s\n" , str_1);
  6. char * p = "GZ2075";
  7. bzero(str, sizeof(str));
  8. printf("str:%s\n" , str);
  9. strcpy(str_1 , p); // 不会检查内存空间大小
  10. printf("str:%s\n" , str_1);
  11. // strncpy(str_1 , p , 32 ); // 控制拷贝的数据大小,在安全范围内
  12. printf("str+8:%s\n",str_1+8);//发现strcpy纯粹覆盖内容并没有清空,strlen + 1 --> 跳过GZ2075 + 结束符
  13. 输出:
  14. str_1:Hello&Even&GZ2075
  15. str:
  16. str:GZ2075
  17. str+8:en&GZ2075

strcmp

函数功能:字符串比较,strncmp会顺便清空后面的内容。加入实际数据只有8字节而n是32,则会把8字节后的数据清空为 0 
头 文 件:#include <string.h>
定义函数:int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
参数分析:s1 --> 需要比较的字符串1 s2 --> 需要比较的字符串1 n --> 需要比较的前N个字符
返 回 值:返回 0 表示两个字符串相等, 返回 非零 表示两个字符串不同,返回值为第一个不同首字母的ASCII码的差值。

  1. char *str1 = "AAAAA";
  2. char *str12 = "AAA";
  3. int result = strcmp(str1, str2); //注意是str1-str2,传入参数与顺序有关
  4. printf("result = %d\n", result);
  5. printf("result = %c\n", result); //返回不同的第一个字母在ascii上的差值,
  6. 输出:
  7. 65
  8. A

strchr

函数功能:查找字符串中第一个出现的指定字符
头 文 件: #include <string.h>
定义函数: char * strchr (const char *s, int c); // 从左往右
char * strrchr (const char *s, int c); // 从右往左
参数分析: s --> 需要查找的字符串 c --> 需要查找的字符(unsigned char )
返 回 值: 成功 返回第一次出现的位置的地址 失败 返回 0

  1. char p1[] = "Hello&Even";
  2. char * ret_val = strchr(p1 , 'e'); // 从左往右寻找
  3. printf("RetVal :%s \n" , ret_val);
  4. ret_val = strrchr(p1 , 'e'); // 从左往右寻找
  5. printf("RetVal :%s \n" , ret_val);
  6. 输出:
  7. RetVal :ello&Even
  8. RetVal :en

注意

1.字符串函数传入的参数最好用字符数组定义,因为有些字符串处理函数,不允许传入字符指针;
2.字符串函数返回地址,应该用字符指针接收;
3.处理字符串时,要注意结尾是否加上了'\0',定义的字符数组的大小也应该能够容纳结束符'\0'。

原文链接:http://www.cnblogs.com/ding-ding-light/p/14088767.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号