c和c++
文章平均质量分 72
u010154760
这个作者很懒,什么都没留下…
展开
-
文本文件与二进制文件区别
一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。 从上面转载 2015-05-26 13:51:45 · 413 阅读 · 0 评论 -
cout 格式化输出
将 cout 的 flag 保存到变量, 以便修改后的恢复 ostream::fmtflags old = cout.flag() ; // 无参将返回当前 flag 值 cout.flag(old) ; // 恢复到原先保存的值将 bool 值以 literals 输出cout "nu转载 2015-05-05 12:34:10 · 318 阅读 · 0 评论 -
第一个DLL程序:动态链接库DLL教程,30分钟快速上手
DLL 程序的入口函数是 DllMain(),就像 DOS 程序的入口函数是 main()、Win32 程序的入口函数是 WinMain() 一样。前面我们一直在讲的就是DOS程序。DllMain() 函数的原型为: BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVO转载 2015-05-13 12:18:18 · 732 阅读 · 0 评论 -
linux下动态链接库(.so)的显式调用和隐式调用
进入主题前,先看看两点预备知识。一、显式调用和隐式调用的区别 我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件)。转载 2015-05-13 11:20:39 · 1692 阅读 · 0 评论 -
.h头文件 .lib库文件 .dll动态库文件之间的关系
c++mfc头文件库文件动态库目录(?)[+].h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。.h .lib .d转载 2015-05-04 11:18:56 · 1642 阅读 · 0 评论 -
.h头文件 .lib动态链接库文件 .dll 动态链接库
dllarchiveimport(1).h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。附加依赖项的是.lib 不是.dll 若生成了DLL ,则肯定也生成 LIB文件 如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。.h .lib .dll三者转载 2015-05-04 10:36:36 · 472 阅读 · 0 评论 -
C Runtime Library
msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能. C Runtime Library 的来历, API, STL, MFC, ATL关系 刚接触Windows开发时,为了快速入门查了不转载 2015-05-04 11:12:30 · 357 阅读 · 0 评论 -
动态链接库和静态链接库
动态链接库dll,静态链接库lib, 导入库lib目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。 静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静转载 2015-05-04 11:21:59 · 390 阅读 · 0 评论 -
va_list/va_start/va_arg/va_end深入分析
va_list/va_start/va_arg/va_end这几个宏,都是用于函数的可变参数的。我们来看看在vs2008中,它们是怎么定义的: 1: ///stdarg.h 2: #define va_start _crt_va_start 3: #define va_arg _crt_va_arg 4: #define va_end _crt_转载 2015-03-03 12:18:09 · 465 阅读 · 0 评论 -
文件使用二进制模式打开情况下的换行的方法
今天用VS2010写个简单的用来记录软件的日志到文件的程序,使用\n原因:对于文件,在windows平台下的换行是LRCR(“\r\n")(只针对WINDOWS的记事本工具来说,若用智能些的文本编辑器,就会换行了),, 所以在使用二进制模式打开文件,写入的时候,换行请使用\r\n,记事本工具打开肯定是正确的,但是使用一些智能文本编辑器比如notepad,则可能会有不同的效果(比如not转载 2015-04-02 13:40:39 · 2846 阅读 · 0 评论 -
C++静态库与动态库
这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库转载 2015-04-26 20:49:38 · 347 阅读 · 0 评论 -
编译链接------Linux环境下c语言静态链接库和动态链接库创建和使用
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。动态库而言:某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让转载 2015-04-26 20:48:24 · 4215 阅读 · 0 评论 -
野指针
野指针指指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为 NULL 避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。目录1成因▪ 指针变量未初始化▪ 指针释放后之后未置空▪ 指针操作超越变量作用域2规避▪ 初始化时置 NULL▪ 释放时置转载 2015-04-21 21:51:30 · 455 阅读 · 0 评论 -
关于C语言中的未初始化变量的值
我们在刚学C编程的时候经常碰到“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”,这是为什么呢?先从上次某公司笔试说起,当时有一题是考到了关于变量初始化的问题。在主函数外面(全局)和里面(局部)个定义一个int类型数值。然后没有赋值,直接打印出来,问输出什么。那会只知道全局默认是0,局部是一个负的挺大的数,还以为是最小整数。回来后试了下,局部的int默认的是-858993460,即0转载 2015-04-21 21:48:44 · 1276 阅读 · 0 评论 -
动态链接库dll,静态链接库lib, 导入库lib
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。 静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态l转载 2015-05-13 11:21:36 · 410 阅读 · 0 评论 -
动态链接库的隐式连接与显式连接有什么不同
隐式链接是指在代码中使用了了库中的代码,只是在链接时,链接器会把该库的符号信息以及导入函数的信息写入到生成的Exe文件的特定的区段中。当该程序加载时,操作系统会根据这个区段中的信息,来查找每个它需要的动态库,并根据这些动态库的导出表,与程序中的导入表相配对,以确定程序中使用的动态库中的代码在什么位置。这样应用程序就能够正确是链接到动态库中的代码了。如果在这个过程中,发生了错误,比如没有找到要求的库转载 2015-05-13 12:15:24 · 1358 阅读 · 0 评论 -
请问dll中的隐式链接和显式链接的区别?谢谢,初学VC,多多帮助,在线等
1、静态调用方式:由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(如还有其它程序使用该DLL,则Windows对DLL的应用记录减1,直到所有相关程序都结束对该DLL的使用时才释放它),简单实用,但不够灵活,只能满足一般要求。 隐式的调用:需要把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的函数时,只须说明一下。隐式调用不需要调用LoadLibrary()转载 2015-05-13 12:14:19 · 1858 阅读 · 0 评论 -
Linux中的段管理,bss段,data段
Linux 的段管理,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。该段用于存储未初始化的全局变量或者是默认初始化为0的全局变量,data段 该段用于存储初始化的全局变量,初始化为0的全局变量出于编译优化的策略还是被保存在BSS段,数据段也转载 2015-06-18 20:59:35 · 1037 阅读 · 0 评论 -
【动态分配栈内存】之alloca内幕
哎,下班回家就开始大扫除,一直到凌晨才搞定,真的累了。但是计划的是今天必须将本文写完,不写完睡不着觉。那就尽快切入正题吧! 我们经常使用malloc或者new等函数或操作符来动态分配内存,这里的内存说的是堆内存,并且需要程序员手工释放分配的内存。malloc对应free,new对应delete。至于你要混着用,也不是不可以,只要确保逻辑和功能的正确性,还要在规范的限制范围内。转载 2015-06-18 22:29:04 · 771 阅读 · 0 评论 -
内存的静态分配和动态分配的区别
内存的静态分配和动态分配的区别主要是两个: 一是时间不同。静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候。 二是空间不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由函数alloca进行分配。不过栈的动态分配和堆不同,他的动态分配是由编译器进行释放,无需转载 2015-06-18 22:27:45 · 829 阅读 · 0 评论 -
全局/静态变量初始化为0放在bss段还是data段
2013-6-4上午去面试,被鄙视了,技术公司大牛的风范,好犀利!不过我这题应该是蒙对了。。 如:static unsigned char s_test = 0;这个静态变量是放到bss段还是data段呢,以下是我编译的结果:(全局变量也是如此) 1.看这样子,即使是初始化了,但是初始化的是0,还是放在bss段的2.这里还有一个问题,即使是全转载 2015-06-18 20:46:42 · 12768 阅读 · 1 评论 -
关于const char*和char*、const char** 和char** 赋值问题
根据ANSI C标准的赋值约束条件: 1. 两个操作数都是指向有限定符或无限定符的相容类型的指针。 2. 左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。一、const char*和char* const char*的类型是:“指向一个具有const限定符的char类型的指针”。(不能修改其值) char*的类型是:“指向一个char类型的指转载 2015-06-18 13:11:43 · 4038 阅读 · 0 评论 -
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有释转载 2015-06-18 22:22:20 · 404 阅读 · 0 评论 -
数据段和只读数据段
3.3.2 数据段和只读数据段.data段保存的是那些已经初始化了的全局静态变量和局部静态变量。前面的SimpleSection.c代码里面一共有两个这样的变量,分别是global_init_varabal与static_var。这两个变量每个4个字节,一共刚好8个字节,所以".data"这个段的大小为8个字节。SimpleSection.c里面我们在调用"printf"的时候,转载 2015-06-18 20:54:31 · 4943 阅读 · 0 评论 -
变量声明和定义的区别
我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义转载 2015-05-14 22:27:27 · 346 阅读 · 0 评论 -
struct和typedef struct彻底明白了
struct和typedef struct分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student s转载 2015-05-14 22:24:25 · 424 阅读 · 0 评论 -
malloc()与 alloc()区别 (转)
malloc()与 alloc()C语言跟内存分配方式(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存转载 2015-05-15 10:37:54 · 326 阅读 · 0 评论 -
C语言union(联合体 共用体)
一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住。这次看书又看到了,还是学习一下吧。一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂。本质上来说和结构体是一样的,但是从包装的角度来看有差异。union中可以定义多个成员,union的大小由最大的成员的大小决定(是其整数倍,和struct相同)。union成员共享同一块大小的内存转载 2015-05-15 10:26:13 · 526 阅读 · 0 评论 -
动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
静态链接库在链接时,编译器会将 .obj 文件和 .LIB 文件组织成一个 .exe 文件,程序运行时,将全部数据加载到内存。如果程序体积较大,功能较为复杂,那么加载到内存中的时间就会比较长,最直接的一个例子就是双击打开一个软件,要很久才能看到界面。这是静态链接库的一个弊端。动态链接库有两种加载方式:隐式加载和显示加载。隐式加载又叫载入时加载,指在主程序载入内存时搜索D转载 2015-05-13 10:23:22 · 5749 阅读 · 0 评论 -
动态链接库的显示加载和隐式加载的区别
使用动态DLL有两种方法,一种是隐式链接,一种是显式链接,如果用loadlibrary就是显示链接,用lib就属于隐式链接。两种方法对于你的程序调用动态库时没有任何区别,只是你在编程时,步骤是不一样的。显式调用麻烦了点,但可以没有相应的lib库;隐式调用,使用起来比较简单,有函数的声明就可以了,但必须有lib库。隐式加载默认是加载到内存中的,始终占用内存。显示加载,你加载时占用内存,释放了就不占用转载 2015-05-13 12:17:13 · 577 阅读 · 0 评论 -
VS下 debug与release运行结果不一致
摘要 VS中遇到 debug与release下运行结果不一致,太疼了VS debug release网罗了大量文章,主要说变量未初始化的较多,代码量较大,着实不好搞,依次排查,但凡涉及的都已经初始化,无果...eggs hurt~~~持续~~~最后初步敲定嫌疑:PI的问题,每次用到介个全局变量的时候就报错,把代码中PI用3.1415926****代替,无果.转载 2015-04-21 21:50:47 · 8039 阅读 · 0 评论 -
if(a);if(!a);if(a!=0);if(a==0)有什么区别?
if(a);如果a为真就继续,这里的真包括非0数字和非0字符,if(!a);就是如果a为假就继续,这个和最后一个等价if(a!=0);这个就是如果a不等于0if(a==0) 如果a等于0来源:http://zhidao.baidu.com/link?url=4Ln-R3K92BVcU9Fm0IfYMMapfkUwLNAp_LaLHDASg转载 2015-04-21 11:37:16 · 5794 阅读 · 1 评论 -
C语言--二维数组声明时,可以省略第一维
将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。事实上,编译器是这样处理数组的: 设有数组int a[m][n],如果要访问a[i][j]的值,编译器的寻址方式为: &a[i][j]=&a[0][0]+i*sizeof(int)*n+j*sizeof(int); //注意n为第二维的维数,转载 2015-04-24 19:05:25 · 20941 阅读 · 0 评论 -
c语言的位取反和按位异或
//如果a = 2,那么二进制位 0 000 0010,~ (a)的二进制就是 1 111 1111.结果不该为-3啊,请问这个位运算符是怎么取反的啊。谢谢!#include #include int main (void){ int a = ~(2); printf ("%d\n",a); //为什么结果是-3system ("pause");return 0;转载 2015-04-10 13:21:44 · 14614 阅读 · 0 评论 -
内存中常见异常值的解释(比如0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值 )
* 0xcccccccc : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory* 0xcdcdcdcd : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memor转载 2015-04-03 21:28:42 · 982 阅读 · 0 评论 -
ASCII码对照表(0-255)[备忘]
ASCII码表 信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解。为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制的统一的信息交换代码,这就是ASCII码表,它的全称是“美国信息交换标准代码”。转载 2015-04-01 21:31:04 · 1817 阅读 · 0 评论 -
ASCII码
ASCII码的取值范围是0~127,可以用7个bit表示。C语言中char型变量的大小规定为一字节,如果存放ASCII码则只用到低7位,高位为0。以下是ASCII码表:图 A.1. ASCII码表绝大多数计算机的一个字节是8位,取值范围是0~255,而ASCII码并没有规定编号为128~255的字符,为了能表示更多字符,各厂商制定了很多种ASCII码的扩展规范。注意,虽转载 2015-04-01 21:41:12 · 1839 阅读 · 0 评论 -
C语言八皇后问题中怎样判断满足行列斜线没有棋子的条件?
算法分析:数组a、b、c分别用来标记冲突,a数组代表列冲突,从a[0]~a[7]代表第0列到第7列,如果某列上已经有皇后,则为1,否则为0; 数组b代表主对角线冲突,为b[i-j+7](行号-列号+7),主对角线共有15条,即从b[0]~b[14],如果某条主对角线上已经有皇后,则为1,否则为0; 数组c代表从对角线冲突,为c[i+j](行号加列号),从对角线也有15条,即从c[0]~转载 2015-04-03 22:08:14 · 2194 阅读 · 0 评论 -
回车和换行
我一直没有搞得很清楚,回车和换行符有啥区别。记得大一时,C语言老师就说过回车、换行,但都没说得那么细。前两天,看写两句Perl代码时,忽然想起区别一下回车和换行(\r和\n)。现在理解清楚了,记个笔记吧。符号 ASCII码 意义\n 10 换行NL\r 13 回车CR回车 \r 本义是光标重新回到本转载 2015-03-30 14:45:42 · 522 阅读 · 0 评论 -
scanf输入字符串问题
1、#include"stdio.h"#include"iostream"using namespace std;int main(){ char a[4]={'l','o','v','\0'}; printf("%s",a); system("PAUSE"); return 0;}原创 2015-03-14 18:56:30 · 5154 阅读 · 0 评论