整理一下日常用到的c++中的字符串处理函数

1.strpbrk和strspn

最近看了一个解析http请求的方法,里面用到了这俩函数,在这里记录一下。首先,http的请求报文的格式如下:

strpbrk和strspn的原型和注释为:

/* Find the first occurrence in S of any character in ACCEPT.  */
extern char *strpbrk (char *__s, const char *__accept)__THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
/* Return the length of the initial segment of S whichconsists entirely of characters in ACCEPT.
该函数返回 s 中第一个不在字符串 accept 中出现的字符下标。 */
extern size_t strspn (const char *__s, const char *__accept)__THROW __attribute_pure__ __nonnull ((1, 2));

结合实例进行说明,现在假设报文如下:

现在结合代码和上面示例进行解析:
http_conn::HTTP_CODE http_conn::parse_request_line(char *text)
{m_url = strpbrk(text, " t");
//m_url=t/chapter17/user.html HTTP/1.1if (!m_url){return BAD_REQUEST;}*m_url++ = '0';
//将t替换为0  m_url=/chapter17/...char *method = text;
//应为有0的存在,method=POSTif (strcasecmp(method, "GET") == 0)m_method = GET;else if (strcasecmp(method, "POST") == 0){m_method = POST;cgi = 1;}elsereturn BAD_REQUEST;m_url += strspn(m_url, " t");
//确保第一个不是空格 m_url=/chapter17/...m_version = strpbrk(m_url, " t");
//m_version=tHTTP/1.1if (!m_version)return BAD_REQUEST;*m_version++ = '0';
//将t替换为0  m_version=HTTP1.1m_version += strspn(m_version, " t");if (strcasecmp(m_version, "HTTP/1.1") != 0)return BAD_REQUEST;if (strncasecmp(m_url, "http://", 7) == 0){m_url += 7;m_url = strchr(m_url, '/');}if (strncasecmp(m_url, "https://", 8) == 0){m_url += 8;m_url = strchr(m_url, '/');}if (!m_url || m_url[0] != '/')return BAD_REQUEST;//当url为/时,显示判断界面if (strlen(m_url) == 1)strcat(m_url, "judge.html");m_check_state = CHECK_STATE_HEADER;return NO_REQUEST;
}

2.strcpy

char *strcpy(char *strDest,const char *strSrc);
微软中的此函数的参数说明:
/***
*char *strcpy(dst, src) - copy one string over another
*
*Purpose:
*       Copies the string src into the spot specified by
*       dest; assumes enough room.
*
*Entry:
*       char * dst - string over which "src" is to be copied
*       const char * src - string to be copied over "dst"
*
*Exit:
*       The address of "dst"
*
*Exceptions:
*******************************************************************************/

有时笔试中会让手写一下strcpy的代码,并问一下为什么会返回char*?

char * __cdecl strcpy(char * dst, const char * src)
{char * cp = dst;while( *cp++ = *src++ );               /* Copy src over dst */return( dst );//这块要注意一下返回dst,而不是cp,因为cp是栈上的变量,如果强行返回,
//会导致输出为乱码
}

大部分人可能看到为什么会返回char*,会想到的是越界的问题,在strcpy是假设dst有足够空间的。如果src的长度>dst的长度,也可以拷贝过去,但在最后程序会报

Stack around the variable 'dst' was corrupted.

至于为什么这么做?

通过这篇博客的博主,我了解到了是为了获得灵活性。例如:

char str[20];
int length = strlen( strcpy(str, “Hello World”) );

为什么strcpy的返回值是char* ?​blog.csdn.net

至此,解释完毕,后续再补充其他字符串的处理函数。

js怎么把函数字符串转成函数_字符串处理函数相关推荐

  1. python把一个字符串拆分成多个字段_如何把一个字符串分割成多个字符串

    展开全部 下面两种方法均可以把一个62616964757a686964616fe58685e5aeb931333363393661字符串分割成多个字符串 一.Java 知识补充String的split ...

  2. python字符串转化成列表_Python字符串如何转化为列表

    在讲解Python字符串转化为列表的方法之前,我们先来对python字符串基础知识进行简单回顾,方便后续的灵活运用. 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来 ...

  3. java字符串反转及替换_字符串的替换(str_replace)

    php字符串与字符替换函数 在php教程替换字符效率最高也是最简单字符替换函数str_replace($arr1,$arr2,$str) 实例一 str_replace("iwind&quo ...

  4. mybatis字符串转成数字_Python字符串三种格式化输出

    字符串格式化输出是python非常重要的基础语法,今天就把三种格式化输出做一个简单的总结,希望对大家有帮助. 格式化输出:内容按照一定格式要求进行输出. 1.使用占位符%输出 python2.6版本之 ...

  5. angular 字符串转换成数字_蓝盟IT外包,Python算法的一般技术和嵌入式库|python|字符串|key|算法|调用...

    近年来,随着python着火,python也开始受到很多程序员的喜爱. 很多程序员已经开始使用python作为第一语言. 最近在python上刷问题时,我想去找python的刷问题常用库api和刷问题 ...

  6. angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...

  7. 箭头函数的this指向谁_高阶函数

    NodeJS 系列文章,本篇是第一篇,首先,预计将后续高频使用逻辑串一遍,依次是高阶函数,promise以及事件机制.本篇主要是高阶函数. call.bind.apply call.apply 都是改 ...

  8. python字符串转换成整数_在Python中将字符串转换为整数的方法

    在本文中,我们将向你展示如何将Python字符串转换为整数,可在Linux操作平台上进行.Python中的所有数据类型(包括整数和字符串)都是对象,通常在编写Python代码时,你需要将一种数据类型转 ...

  9. 函数的凹凸性证明_判断复杂函数的凹凸性

    判断无人机能量x关系函数的凹凸性(函数是关于v和drt的二元函数) 函数有非常多的参数,极其复杂,看到就烦,我首先用画函数的方法通过图像法来观察,但是画出来的图像不忍直视(或许是我画的图像不对,反正看 ...

  10. 函数计算的是什么_【Excel函数教程】3个例子让你彻底玩转EDATE函数

    在日常的工作中,我们经常需要计算各种到期时间. 比如HR,就需要计算合同到期日.退休到期日.员工转正日期等. 生产或销售人员,需要关注产品的有效期等等-- 如果你不知道EDATE函数的话,可能这类问题 ...

最新文章

  1. dns网络服务的搭建和配置
  2. PAT甲级1096 Consecutive Factors :[C++题解]连续的因子、约数
  3. 编写yara规则,检测恶意软件(自定义yara规则)
  4. syncd的使用和部署
  5. 力扣题目——566. 重塑矩阵
  6. 今天用pro安装nginx+php+mysql出现故障的解决方法
  7. hdu 5437Alisha’s Party(优先队列)
  8. python 私有属性一个_和两个_的区别_python-面向对象-13-私有属性
  9. jquery实现div自适应浏览器高度
  10. wps2019无法使用粘贴复制快捷键
  11. 李阳疯狂英语助教工作总结
  12. 乐王微博访谈实录 转
  13. 苹果录屏没声音_苹果iPhone手机没声音不会响 电话扬声器无法正常工作的修复方法...
  14. 《惢客创业日记》2021.07.15-17(周四)房东和租客,谁更弱势?
  15. Keil5开发工具 --- 背景颜色绿色护眼
  16. Jmeter性能测试报告导出
  17. java 格式化数字(每三位加逗号),保留两位小数。
  18. 无法访问其它家庭组计算机,Win7电脑同一个家庭组或者工作组,电脑无法相互访问...
  19. mysql inet_aton 原理_基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析_MySQL
  20. [Qt] TCP客户端与服务器断开连接自动重联机制

热门文章

  1. numpy基础(part12)--快速傅里叶变换模块
  2. SAP UI5 初学者教程之七 - JSON 模型初探试读版
  3. 如何将ng-template整体作为一个参数,传递给另一个组件
  4. SAP Spartacus里的routerLink测试
  5. SAP Spartacus org unit list当前行is-current的判定逻辑
  6. Angular自定义structural指令的实例化过程以及set方法的调用
  7. 能否直接在Visual Studio Code里查看TypeScript的数据类型定义
  8. SAP CRM Fiori应用如何启用Sales Office和Sales Group两个字段
  9. Azure上用API成功创建Lambda Function的截图
  10. running Extension project directly on ABAP server without Launchpad