首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >string.h和cstring之间的区别?

string.h和cstring之间的区别?
EN

Stack Overflow用户
提问于 2011-12-05 11:51:54
回答 8查看 29.8K关注 0票数 23

string.hcstring有什么区别?

哪一个应该用于C,哪个应该用于C++ (如果有的话)?

EN

回答 8

Stack Overflow用户

发布于 2011-12-05 11:55:11

在C++中,您应该将cstring作为头文件,而在c中,您应该将string.h作为头文件。

C++中的

代码语言:javascript
复制
#include <cstring>

C中的

代码语言:javascript
复制
#include <string.h>

C++标准库中也提供了C标准库的功能,并且作为通用命名约定,它们由c作为C标准库中相应名称的前缀。

例如:

string.h成为cstring

stdio.h变成cstdio,依此类推。

由于其他答案为这场讨论添加了不同的维度,我觉得有必要参考神圣的标准来澄清这一点。

根据C++11 20.9.14.6 & 7:

表55描述了报头<cstring>

其内容与标准C库头文件相同,但更改为21.7中指定的memchr()

而21.7空终止序列实用程序声明:

函数签名memchr(const void*, int, size_t)需要替换为两个声明: const void* memchr(const void* s,int c,size_t n);void* memchr( void* s,int c,size_t n);

两者应具有与原始声明相同的行为。

声明:附录D(标准)兼容性特性描述:

D.6 C标准库头文件

1为了与C标准库和C Unicode TR兼容,C++标准库提供了25个C标头,如表151所示。

其中包括:

<assert.h> <float.h> <math.h> <stddef.h> <tgmath.h> <complex.h> <inttypes.h> <setjmp.h> <stdio.h> <time.h> <ctype.h> <iso646.h> <signal.h> <stdint.h> <uchar.h> <errno.h> <limits.h> <stdarg.h> <stdlib.h> <wchar.h> <fenv.h> <locale.h> <stdbool.h> <string.h> <wctype.h>

再往前看,

2使用每个C标头,每个标头都有一个格式为using name.h**,的名称,就好像由相应的** cname header 放置在标准库命名空间中的每个名称都放在全局命名空间范围内一样。未指定这些名称是首先在命名空间标准的命名空间作用域(3.3.6)内声明还是定义,然后通过显式-声明(7.3.3)注入到全局命名空间作用域中。

3示例:头<cstdlib>肯定在名称空间std中提供了它的声明和定义。它还可以在全局名称空间内提供这些名称。头<stdlib.h>在全局名称空间中肯定提供了相同的声明和定义,与C标准中的声明和定义非常相似。它还可以在命名空间std中提供这些名称。-end示例

结论:

从上面的引用中:

我纠正了我之前的建议,使用cstring比使用string.h似乎没有明显的优势,而正如@Alf建议的那样,当使用cstring作为头文件时,由于使用非限定函数名,可能会出现一些编译问题。因此,考虑到使用string.h没有明显的缺点或使用cstring的优点,我认为如果使用得当,两者都可以在C++中使用。

票数 26
EN

Stack Overflow用户

发布于 2011-12-05 12:13:54

H和cstring之间有细微的区别

Alf P. Steinbach的答案(可以作为对所问问题的评论):

string.h将标识符放在全局名称空间中,也可以将它们放在标准名称空间中。而cstring将标识符放置在标准命名空间中,并且也可以将它们放置在全局命名空间中。你肯定不想要这种cstring行为,因为例如只使用strlen的代码可能在一个编译器上工作得很好,然后在另一个编译器上编译失败。这是非常令人不快的惊喜。因此,对于C和C++,请使用更安全的string.h

票数 6
EN

Stack Overflow用户

发布于 2011-12-05 11:54:48

在C++中,C语言头是在名称空间std下定义的。因此,如果您在C++中使用这些头文件,请使用cstring并删除.h。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8380805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档