strings.h 与 string.h 头文件的区别
今天使用 man string 来查看 string 文件的使用的方法(毕竟里面的函数名字和传入参数和发挥参数的类型,如果一段时间不使用,会产生遗忘。)
偶然发现,string.h 的man page 中 出现了 strings.h 的说明。这引起的我的好奇,很奇怪这个strings 和 string 之间的关系。我上网搜了几个帖子,他们写的不够清楚,今天我进行重新整理一下吧:
首先我们看一下man string 里面的内容:

可见,strings 头文件中包含了,部分函数,没有再string.h 中出现的。如图的环境是 macOS Sierra 版本号为:10.12.6
包括; index, rindex, strcasecmp, strncasecmp 这四个函数。
为了一探,这个头文件是不是只有macos 这种 Unix-like 系统中才出现。我在Linux下的ubuntu 系统中也进行了查看。

我们使用命令,man string 命令,同样可见相同的内容。可见它已经是c 标准库中的头文件。
进阶:我们到底该用哪个头文件呢?
为了进一步搞清楚,我们到底在编程的使用string 还是 strings 头文件。我们在 linux 的 /usr/include 文件夹中打开strings 头文件来一窥究竟。
在 strings.h 文件中给了我们明确的答案:

大意为: 如果我们使用了string.h 这个头文件,那么我们不需要在进行包含这个 strings.h 这个文件。除非有一种情况。如果 没有定义 __USE_MISC这个变量,这个变量将会在 strings.h 头文件中进行定义。因为 string.h 中没有进行对这个变量进行定义。具体怎么定义的,大家可以在/usr/include/strings.h 这个文件中进行详细查看。
更进一步:
为了进一步查看社区中的这两个文件的看法,我们在stackoverflow 中 找到了这个话题的讨论。和我们的解释大同小异:
观点1:
strings.h comes from the BSD branch in the unix evolution. Its content has been standardized by POSIX, but most of it is marked as legacy and can be easily replaced with other functions
观点2:
Typically <strings.h> just adds some useful but non-standard additional string functions to the standard header <string.h>. For maximum portability you should only use <string.h> but if you need the functions in <strings.h> more than you need portability then you can use <strings.h>instead of <string.h>.
strings.h 与 string.h 头文件的区别的更多相关文章
- 配置apue的头文件apue.h和unp的头文件anp.h
配置apue的头文件apue.h和unp的头文件anp.h 如果要使用gcc -g 来生成可调试文件一定要修改Make.defines.linux文件中的CFLAGS变量 修改为:CFLAGS=-an ...
- hpp头文件与h头文件的区别
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译.而实现代码将直接 ...
- 在.h和.cpp中包含头文件的区别
1.在.h中包含头文件,是为了声明一系列这个头文件的变量等,可能会产生重复包含的问题: 2.在.cpp中包含头文件只是为了实现这个头文件或者使用其中的方法,不会有重复包含的问题,所以尽量在源文件中包含 ...
- C++中cstring.h和string.h的区别
转载:https://blog.csdn.net/qian_chun_qiang/article/details/80648691 1.string与cstring有什么区别 <string&g ...
- stdlib.h,string.h,wchar.h的函数列表(cplusplus.com就有,很清楚)goodx
Multibyte characters mblen Get length of multibyte character (function ) mbtowc Convert multibyte se ...
- string所在头文件
使用string.wstring 头文件:#include <string> 命名空间:std
- 【iOS】The differences between Class Extension and Header File 类扩展与头文件的区别
. As the name suggests, they extend the class. A class continuation is another name. The class exten ...
- 头文件string.h中的函数及使用方法
来源:http://blog.csdn.net/tsyj810883979/article/details/5116817 字符串拷贝1 @函数名称: strdup函数原型: char *st ...
- 头文件string.h,cstring与string
string.h string.h是一个C标准头文件,所有的C标准头文件都形如name.h的形式,通过#include <string.h>可以导入此头文件.之后我们就可以在程序中使用st ...
随机推荐
- 隐藏Easy UI 中parent.$.modalDialog 的button
例子: buttons : [ { text : '关闭', handler : function() { parent.$.modalDialog.handler.dialog('close'); ...
- Docker学习笔记 - 在运行中的容器内启动新进程
docker psdoker top dc1 # 容器情况# 在运行中的容器内启动新进程docker exec [-d] [-i] [-t] 容器名 [command] [args]docker ex ...
- gradle入门(1-6)将Java项目从maven迁移到gradle
gradle项目与maven项目相互转化(转) 转自: http://www.cnblogs.com/yjmyzz/p/gradle-to-maven.html 一.maven项目->gradl ...
- 版本名称GA的含义:SNAPSHOT->alpha->beta->release->GA
SNAPSHOT->alpha->beta->release->GA ----------------------------------------------------- ...
- GET和POST两种基本请求方法的区别
文章来源:http://www.cnblogs.com/logsharing/p/8448446.html GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一 ...
- angulajs_删除功能
- 初入HTML5
在最开始接触HTML5的时候,你会遇到的大多是一些常见常用的属性以及属性值.它们分类广.品种杂且使用率高.到css各种样式的时候,你会接触到更多的东西,各种属性.选择器.盒子模型都是重点.那么,现在我 ...
- 使Asp.net Core同时支持输出Json/Xml
我们知道Asp.net Core是支持输出为Json格式的.同时也支持输出为xml格式.只要我们正确的配置.并在Request时指定正确的Accept,即可根据不同的Header来输出不同的格式. 前 ...
- RPC服务和HTTP服务
很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...
- promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解
* promise承诺 * 解决js中异步编程的问题 * * 异步-同步 * 阻塞-无阻塞 * * 同步和异步的区别? 异步;同步 指的是被请求者 解析:被请求者(该事情的处理者)在处理完事情的时候的 ...