#include<cstring> #include<string> #include<string.h>有什么区别啊?
(http://topic.csdn.net/t/20041030/00/3505110.html)
#include <cstring> //不可以定义string s;可以用到strcpy等函数
using namespace std;
#include <string> //可以定义string s;可以用到strcpy等函数
using namesapce std;
#include<string.h> //不可以定义string s;可以用到strcpy等函数
这三种到底有什么区别啊?
string // C++ STL 字符串类
string.h // C字符串函数 (strcpy()、strcat()、strcmp()等)
cstring // 用namespace std包含过的C字符串函数 (C++在移植C的头文件时前面会加前缀'c')
C++有字符串的标准类string,string类也有很多方法,这是C++标准库的东西,包含头文件string就行
但是现在它同样包含了C风格字符串操作函数的定义(应该是通过包含string.h实现的)
cstring就是string.h,只不过封装在std里面
(http://topic.csdn.net/u/20090109/09/3f778ed3-801b-4061-85d4-c28a4e26729d.html)
一般一个C++的老的带".h"扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带".h"扩展名的相对应,区别除了后者的好多改进之外,还有一点就是后者的东东都塞进了"std"名字空间中。
但唯独string特别。
问题在于C++要兼容C的标准库,而C标准库里碰巧也已经有一个名字叫做"string.h"的头文件,包含一些常用的C字符串处理函数,比如strcmp等。
这个头文件跟C++ string类半点关系也没有,所以<string>并非<string.h>的"升级版本",他们是毫无关系的两个头文件。
C++头文件的现状:
旧的C++头文件名如<iostream.h>将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在名字空间std中。(vs2008中#include <iostream.h>,error: 无法打开包括文件iostream.h)
新的C++头文件如<iostream>包含的基本功能和对应的旧文件相同,但头文件的内容在名字空间std中。(在标准化的过程中,库中有部分细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。)
标准C头文件如<stdio.h>继续被支持。头文件的内容不在std中。具有C库功能的新C++头文件具有如<cstdio>这样的名字。它们提供的内容和相应的旧C头文件相同,只是内容在std中。
初看这些有些奇怪,但不难习惯它。最大的挑战是把字符串头文件理清楚:
<string.h> 是旧的C头文件,对应的是基于char* 的字符串处理函数;
<string>是包装了std的C++头文件,对应的是新的string类;
<cstring>是对应于旧C头文件的std版本。
(http://topic.csdn.net/u/20070402/18/7111613b-c5e4-485e-a5d0-33de9aebbaea.html)