C/C++
文章平均质量分 66
primer_programer
永无止境
展开
-
C指针在free的时候异常!
底层的开发一般都是用C语言,这就涉及到内存的管理,指针的申请和释放。最近使用了一个双缓冲队列,结果在释放的时候,出现异常。内存的分配使用的是malloc,对应的释放使用free,感觉没有问题。在网上查找可能原因时有两个原因我觉得最为接近:1. 申请的空间与释放的空间不相等2. 释放时,指针的地址改变,在赋值的过程中造成的。我在申请空间的时候,记录指针地址原创 2008-01-29 15:22:00 · 1566 阅读 · 0 评论 -
sprintf函数详解
转摘声明:选自《CSDN 社区电子杂志——C/C++杂志》在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *转载 2008-01-17 19:11:00 · 1975 阅读 · 0 评论 -
string的字符串替换函数,类似于CString的Replace
标准C++中的string中的函数不多,没有CString的功能强大,但是如果想在Unicode编码下使用多字节,就不能使用CString,于是自己写了一个类似于CString的Replace函数。string replace( const string& inStr, const char* pSrc, const char* pReplace ){ string str = inStr原创 2008-01-15 18:32:00 · 13148 阅读 · 0 评论 -
去除string字符串中的空格
很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。但是C++string也提供很强大的功能,实现trim这种功能也不难。下面是几种方法: 1.使用string的find_first_not_of,和find_last_not_of方法 /* Fil转载 2008-01-15 17:03:00 · 13346 阅读 · 1 评论 -
关于#ifdef__cplusplus问题
主要实现C与C++的相互调用问题c.h的实现#ifndef _c_h_#define _c_h_#ifdef __cplusplusextern "C" {#endifvoid C_fun();#ifdef __cplusplus}#endif#endif----------------------------------转载 2008-01-17 18:20:00 · 1606 阅读 · 0 评论 -
线程函数中访问成员变量的方法
用AfxBeginThread启动线程,线程的执行函数有两种定义的方法:1. 全局函数:UINT threadMessageBoxAdapter( LPVOID lParam );2. 静态成员函数:static UINT threadMessageBoxAdapter( LPVOID lParam ); 我们一般的经验是,在线程中使用变量都必须是全局变量,成员变量原创 2008-01-16 18:28:00 · 1469 阅读 · 1 评论 -
string字符串大小写函数
将整个字符串变成大写或者小写的函数。类似于CString中的MakeUpper和MakeLower函数。string makeUpper( const string& inStr ){ string outStr = ""; for ( int i = 0; i { outStr += toupper( inStr[i] ); } return out原创 2008-01-15 18:41:00 · 1218 阅读 · 0 评论 -
strin去掉首尾空格的函数
相当于CString的TrimLeft和TrimRight函数。string trimLeft( const string& inStr ){ string outStr; outStr = inStr; outStr.erase(0,outStr.find_first_not_of(" ")); return outStr;}string trimRight( const原创 2008-01-15 20:25:00 · 930 阅读 · 0 评论 -
typedef 的用法
用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 虽然转载 2007-12-26 17:02:00 · 1021 阅读 · 0 评论 -
C++程序改成C程序感言
周六帮老婆改程序,她要把帮别人做的一个C++程序改成C程序,平时不用C编程,不过语言都是相通的,而且C语言的语法也比较简单。结果改起来工作量相当大,本以为一个小时就能搞定,结果弄到晚上1点多,第二天起来弄到11点才完事。 用VC6.0做编译器,Win32 Console程序,只需要将cpp文件改成.c文件即可编译。挑重点的说: 1. bool型居然没有定义,又不好定原创 2007-12-26 12:01:00 · 2657 阅读 · 0 评论 -
C语言字符串函数
函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include #include int main(void) { char string[10]; char *str1 = "abcdefghi"; stpcpy(string, str1);原创 2007-12-26 11:58:00 · 752 阅读 · 0 评论 -
匈牙利记法
匈牙利表示法: 它通过在每一个表示符名字的前面放置一个数据类型助记符,为程序员提供了对标识符的即时识别。《1》MFC、句柄、控件及结构的命名规则。 Windows类型 样本变量 MFC类 样本对象 HWND hWnd CWnd* pWnd HDLG hDlg转载 2007-12-26 17:47:00 · 1630 阅读 · 0 评论 -
函数指针的一个经典应用——回调机制
这里的回调机制指的是:声名一个函数,在一个类中实现,然后将地址保存在另外一个类中,这个类得到这个地址,然后调用该函数。具体实现方法:一、 首先在common.h中声名一个函数#ifndef _Common_H_#define _Common_H_ typedef int (_cdecl *CallBack )( int nAddOne, int nSecond );原创 2007-12-26 17:05:00 · 846 阅读 · 0 评论 -
C++内存管理详解
C++程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。1、内存分配方式内存分配方式有三种:(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2)在栈上创建。在执行函数转载 2007-12-26 17:03:00 · 807 阅读 · 0 评论 -
C++中函数指针详解
一、函数指针 一个函数在编译时被分配一个入口地址,将这个入口地址称为函数的指针,可以用一个指针变量指向该函数指针,然后通过该变量来调用函数。有关说明: 1、函数指针的声明格式: 函数返回值类型(*指针变量名)(参数类型列表) 或者是: typedef 函数返回值类型 (*指针变量名)(参数类型列表)原创 2007-12-26 17:01:00 · 3231 阅读 · 0 评论 -
获取文件中字符个数或者文件长度
由于以文本方式和二进制方式读取回车符,读取的长度都为为2,而我需要的是字符个数,下面两种方法经过调试,并且结果正确。 第一种方法: 也可以读取一个不定长的文件。FILE *pFile = fopen( pFilePath, "r" ); if ( pFile == NULL ) { return 0;原创 2007-12-26 16:57:00 · 1439 阅读 · 0 评论 -
C语言文件操作函数
13.1C语言文件1,两种文件存取方式(输入,输出方式)顺序存取直接存取2,数据的两种存放形式文本文件二进制文件 13.2文件指针定义文件类型指针变量的一般形式:FILE *指针变量名;例如:FILE *fp1,*fp2; 13.3打开文件在使用文件之前,需打开文件.在C里使用fopen函数打开文件.格式为:fopen(文件名,文件使用方式);此函数返回一个指向FIL原创 2007-12-26 11:55:00 · 1108 阅读 · 0 评论 -
C++ 判断文件是否存在
#include #include using namespace std; #define FILENAME "stat.dat" int main() { fstream _file; _file.open(FILENAME,ios::in); if(!_file) { cout } else {原创 2008-03-05 09:42:00 · 1476 阅读 · 0 评论 -
动态二维数组
这里以VARIANT类型为例,内建型别(int, double等)都没问题。 // 定义二维数组VARIANT** arg3; // 假设一维大小为nDim1Count,二维大小为nDim2Count,分配空间的方式如下: // 分配空间 arg3 = new VARIANT *[nDim1Count]; for (原创 2008-08-07 21:38:00 · 943 阅读 · 0 评论