C++ 标准头文件与C头文件区别与联系以及C风格字符串
1、cstdlib是C++里面的一个常用头文件, 等价于C中的<stdlib.h>。
2、一般一个带“.h” 扩展名的库文件,比如iostream.h。这是延续C语言的,为了兼容C。在新标准的库中都有一个
不带".h"扩展名的相对应,区别除了后者好多改进之处,还有一点就是后者的东西都放进了“std”名字空间中。
但是 string.h有点特别,问题在于C++要兼容C的标准库,C的标准库里也有一个名字叫做"string.h"的头文件,里面
包含常用的C字符串处理函数,比如 strcmp。这个头文件和C++的string类没有任何关系,所以 <string>和<string.h>这两个头文件没有任何关系。
<cstring>是与C标准库里的<string.h>相对应,但是运行<cstring>需要添加std名字空间。
现在理清 string.h string cstring 这三个头文件的区别:
<string.h>是旧的C头文件,对应的是基于char* 的字符串处理函数
<string>是包装了std的C++ 头文件 对应的是新的string 类
<cstring>是对应于C头文件的std版本
Cstring 是MFC中的类(感觉好多人搞错了)
C++标准函数库是在C的基础上扩展的,C++标准在继承C标准的时候,去掉了头文件后面的.h,然后在前面加上了C。比如C标准中的<stddef.h>到了C++标准中变成了cstddef。size_t就是定义在stddef.h中定义的。
下面是比较:
| C standard library |
|---|
| C++ Standard Library |
|---|
| Standard Template Library |
| C++0x |
| C Standard Library |
参考:http://blog.csdn.net/weitian826/article/details/5995275
这里需要说明的是关于C风格字符串
1、字符串字面值
字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为了兼容C语言,C++中的所有的字符串字面值都有编译器自动在末尾添加一个空字符。
a.字符串没有变量名字,自身表示自身。
b.字符字面值:‘A’
字符串字面值:"A" 包含字母A和空字符2个
c.字符串字面值的链接
d.字符串直接可以赋值给变量,但是与字符串直接相关的内存空间位于只读部分,因此它是常量字符数组。
char* ptr="hello";
prt[0]='a';//这是错误的 编译可以通过 但是运行的时候就发生异常
我们在使用的时候 要用
const char* ptr="hello";
prt[0]='a';//编译的时候就能出现错误
当字符串直接赋值给字符数组的初始化的时候,字符串数组存放与栈中,且不允许引用其它地方的内存。
因此编译器会将字符串直接复制到栈的数组内存中。因此可以进行相应的修改。
char stactArray[]="hello";
statctArray[0]='a';//编译和运行可以通过
e.C++ 风格字符串
使用C++ 风格字符串的时候,要将它当做是 一个普通的类型,如Int,这样反而会避免将string 作为一个类来理解所带来的问题。
f.C 风格字符串
字符串字面值的类型实质是 const char型的数组,C风格字符串是以空字符null结束的字符数组
const char* cp="some value";//编译器会自动在字符串后面加一个null字符
while(cp!=null)//判断当前指向的字符是不是null
{
++cp;
}
C风格字符串的标准版库函数<string.h>
#include <cstring>
strlen(s)//返回s的长度,不包括字符串结束符NULL
strcmp(s1,s2)//当s1<s2 返回值 <0 当s1=s2 返回值=0 当s1>s2 返回值>0
strcat(s1,s2)//把字符串s2 连接到s1上,并返回s1
strcpy(s1,s2)//将s2复制给s1并返回s1
strncat(s1, s2, n) // 将s2的前n个字符连接到s1后面,并返回s1
strncpy(s1, s2, n) // 将s2的前n个字符复制给s1,并返回s1
if(cp1 < cp2) // 比较地址
const char *cp1 = "A string example";
const char *cp2 = "A different string";
int i=strcmp(cp1, cp2); // i>0
i=strcmp(cp2, cp1); // i<0
i=strcmp(cp1, cp1); // i=0
C++ 标准头文件与C头文件区别与联系以及C风格字符串的更多相关文章
- 头文件 string.h cstring string 区别
1.#include <cstring> //不可以定义string s:可以用到strcpy等函数using namespace std; #include <stri ...
- 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 右键选择该文件.cpp格式的->属性->预编译头,→ 不使用预编译 ...
- .h头文件 .lib库文件 .dll动态库文件之间的关系
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...
- .c和.h文件的区别(头文件与之实现文件的的关系~ )
.c和.h文件的区别 一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢 ...
- fatal error C1010: 在查找预编译头时遇到意外的文件结尾
错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "stdafx.h"”? 错误分析: 此错误发生 ...
- fatal error C1010: 在查找预编译头时遇到意外的文件结尾 (转)
错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "stdafx.h"”? 错误分析: 此错误发生 ...
- C/C++头文件以及避免头文件包含造成的重定义方法
C 头文件 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享.有两种类型的头文件:程序员编写的头文件和编译器自带的头文件. 在程序中要使用头文件,需要使用 C 预处 ...
- fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”? 解决方法
错误描述: fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 错误分析: 此错误发 ...
- 2016-07-07: 重新编译时vc90.pdb不是创建此预编译头时使用的pdb文件
使用VS2008在一个解决方案中包含多个项目时,当设置多个项目的中间目录为同一个目录时,在增量编译时出现"重新编译时vc90.pdb不是创建此预编译头时使用的pdb文件,请重新创建预编译头问 ...
随机推荐
- 解决spring el表达式不起作用
el表达式不起作用,如下图所示 现象: 在显示页面中加入: <%@ page isELIgnored="false" %>就OK了 参考:http://bbs.csdn ...
- Spring3 MVC请求参数获取的几种方法[转]
Spring3 MVC请求参数获取的几种方法 Spring3 MVC请求参数获取的几种方法 一. 通过@PathVariabl获取路径中的参数 @RequestMapping(value=& ...
- Jmeter时间函数工具(参考)
__time : 获取时间戳.格式化时间 ${__time(yyyy-MM-dd HH:mm:ss:SSS,time)} :格式化生成时间格式 2018-06-01 11:08:23:635 ${_ ...
- Android 布局之LinearLayout 子控件weight权重的作用详析
关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法: 说法一:值越大,重要性越高,所占用的空间越大: 说法 ...
- C 标准IO 库函数与Unbuffered IO函数
先来看看C标准I/O库函数是如何用系统调用实现的. fopen(3) 调用open(2)打开指定的文件,返回一个文件描述符(就是一个int 类型的编号),分配一 个FILE 结构体, 通常里面包含了: ...
- 推荐系统学习07-Waffles
介绍 Waffles 英文原意是蜂蜜甜饼,在这里却指代一个很强大的机器学习的开源工具包. Waffles里包括的算法特别多.涉及机器学习的方方面面,推荐系统位于当中的Waffles_recommend ...
- [转]Windows 7自带很好用的磁盘检查与修复的环境
大家可能都知道Windows 7自带很好用的检查与修复的环境.在启动系统前按F8(就是进入安全模式的方法),Windows 7会有一个修复计算机的选项.选择进入,装载一些必要的文件之后,选择语言.登陆 ...
- win10环境配置react
1 react 需要nodejs所以需要安装nodejs环境,到nodejs官网下载 现在默认会安装nodejs 和 npm包 和 配置环境 2 检查是否安装成功,在命令行中输入 显示成功则正确 3 ...
- python 异步编程
Python 3.5 协程究竟是个啥 Yushneng · Mar 10th, 2016 原文链接 : How the heck does async/await work in Python 3.5 ...
- linux ssh_config和sshd_config配置文件
在远程管理linux系统基本上都要使用到ssh,原因很简单:telnet.FTP等传输方式是以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险.SSH(Secure Shell)目前较可 ...