现在的位置: 首页 > 综合 > 正文

与string相关的头文件解析(C/C++)

2013年11月02日 ⁄ 综合 ⁄ 共 1237字 ⁄ 字号 评论关闭

与string相关的头文件解析(C/C++)

1.下面是大家比较熟悉的头文件

#include <string> c++标准库提供的string类
#include <string.h> c标准库提供的字符串函数
#include <cstring> c++对标准c字符串处理函数的c++增强

string中定义的是一个string类,不用说什么了,但是string.h 和 cstring有什么呢?

/*
 * This is the C++ version of the Standard C Library header @c string.h,
 * and its contents are (mostly) the same as that header, but are all
 * contained in the namespace @c std (except for names which are defined
 * as macros in C).
 */

就是说,这两个文件内容(几乎)相同(除了其中一些宏的名字)。
为什么说几乎相同呢?是因为还是有一点不同,在C++11中,这个函数声明:

void *memchr(const void*, int, size_t) /* in c */

被以下的两个声明替换:

void *memchr (void *, int, size_t) /* in c++ */
const void *memchr (const void *, int, size_t) /* in c++ */

实际上面3个函数的实现是一样的。

2.在有些系统(Unix/Linux etc.)中还有这样的一个头文件strings.h
strings.h来源于Unix的衍生的BSD系统,后来被POSIX标准化,但是其中的很多函数都被标识为LAGACY(遗留的),大多可以被其他函数替换:

int    bcmp(const void *, const void *, size_t); /* LEGACY, see memcmp */
void   bcopy(const void *, void *, size_t); /* LEGACY, see memcpy, memmove */
void   bzero(void *, size_t); /* LEGACY, see memset */
int    ffs(int);
char  *index(const char *, int); /* LEGACY, see strchr */
char  *rindex(const char *, int); /* LEGACY, see strrchr */
int    strcasecmp(const char *, const char *);
int    strncasecmp(const char *, const char *, size_t);

该头文件不是经常用到(在Windows环境都没有这个文件)。

3.说到头文件,还有一个问题要说
<>引用的头文件和""引用的头文件的区别:其实就是搜索路径的区别。
<>引用的头文件的搜索路径是系统库路径;
""引用的头文件的搜索路径首先是当前路径,如果当前路径没有该文件,则去系统路径下搜索。

引用:
string.h和strings.h的区别

抱歉!评论已关闭.