- 博客(25)
- 资源 (1)
- 收藏
- 关注
原创 "显微镜"下细看字符串常量初始化数组和指针
先看代码: 1: #include "stdafx.h" 2: #include 3: 4: using namespace std; 5: 6: int main(int argc, char** argv) 7: { 8: char * p = "ABCD"; 9: cha
2011-05-15 16:59:00 1554 2
原创 VC软件开发规范(参数、返回值以及函数内部实现规则)
4.1 参数的规则 ☆ 【规则4.1-1】 参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字,如果函数没有参数,则用void填充;例如: void SetValue(int nWidth, int nHeight); // 良好的风格 void SetValue(int, int); // 不良的风格 float GetValue(void); // 良好的风格 float GetValue();
2011-05-30 12:01:00 2015 2
转载 简说GLIBC strncpy实现
Tag:语言探索<br />版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明<br />http://bigwhite.blogbus.com/logs/37947818.html<br /><br />比较以下两组代码,你认为哪组运行的更快些呢?<br />Example1:<br /> int n = 100;<br /> int n4 = n >> 2;<br /> int i = 0;<br /><br /> int
2011-05-29 20:37:00 1244 1
转载 GLIBC strlen源代码分析
GLIBC strlen源代码分析 - [语言探索]Tag:语言探索<br />版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明<br />http://bigwhite.blogbus.com/logs/37753065.html<br /><br />直接操作C标准库提供的字符串操作函数是有一定风险的,稍有不慎就会导致内存问题。这周用业余时间写了一个小型的安全字符串操作库,但是测试之后才发现自己的实现有很大的性能缺陷。<br /><br />在Solaris上初步做了一个简单的性能比对,
2011-05-29 20:21:00 922
原创 bug记事:STL map 引发的血案
1: int pairwiseOneSeqIndex = pc->pairwiseOne[i]; 2: int pairwiseTwoSeqIndex = pc->pairwiseTwo[i]; 3: 4: int pairwiseOneBetaIndex = MapSeqIndexToBetaIndex[pairwiseOneSeqIndex]; 5: int pairwiseTwoBetaIndex =
2011-05-28 09:51:00 970
转载 尾递归(转)
2009-03-26 22:24 by Jeffrey Zhao, 25876 visits, 网摘, 收藏, 编辑 这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,权当一次互联网资料的补充。:P 递归与尾递归 关于递归操作,相信大家都已经不陌生。简单地说,一个函数直接或间接地调用自身,是为直接或间接递归。例如,我们可以使用递归来计算一个单向链表的长度:public class Node{ public
2011-05-26 00:28:00 591
原创 怎么访问一个整型数里面的各个字节
刚刚在讨论字节序的问题的时候出现了这么一个问题,怎么访问一个整型变量里面的各个字节,我们知道如果要访问这个整型最低地址一个字节的数据的话,可以通过如下方式: char a = *(char*)&整型变量名; 这里先将整型数通过取地址符号获得变量的开始的地址,为什么要(char*)进行强制类型转换呢,因为对于整型数据的话,表示的就是以首地址开始的4个字节,它是一个整体,取它的地址后,地址对应的类型为int*类型,即如果通过这个指针访问
2011-05-25 20:50:00 3882 2
原创 Difference between "/0" and '/0' and '0' and 0
To me, when doing C/C++: 0 would digit zero, that is, a numerical value. '0' could be the character capital oh or the character zero. For example: char word[10] = "Oxford"; char number[10] = "01234"; Depending on typeface used 'O' may look ex
2011-05-23 18:52:00 625
原创 字符常量与转义字符
一、字符常量 2-4 转义字符表 字符常量是用单引号括起来的字符。 单引号括起来的字符有两种表示方法: 一种是用该字符的图形符号,如'b' ,'y','*'。 另外还可以用字符的ASCII码表示,即用反斜符(/)开头,后跟字符的ASCII码,这种方法也称为转义序列表示法,具体方法是:有两种形式: 一种是用字符的八进制ASCII码,表示为:/ddd这里,ddd是八进制值。 另一种使用字符的十六进制ASCII码值,表示为 /xhh 这里hh是两位十六进制值。 如:'A' ,'/
2011-05-23 18:29:00 7140 1
原创 倒插法实现链表逆置
1: void invert(LinkedList &head) 2: { 3: LinkedList p;//指向当前工作节点 4: LinkedList pn;//指向工作节点的前驱节点 5: 6: //初始化,p指向链表第一个节点,head->next=NULL,即为单独的表头节点。 7: p = head->next; 8:
2011-05-23 15:48:00 1334
原创 详解malloc与free函数
作者:hyuan 日期:2010-8-9 7:25:00 malloc函数具体实现: 以下是在linux2.6.14源码中找到的malloc函数实现 linux-2.6.14/arch/i386/boot/compressed/misc.c 源文件:http://lxr.linux.no/linux+v2.6.14/arch/i386/boot/compressed/misc.c 33 static void* memset(void *, int, size_t); 34
2011-05-22 23:59:00 1068
转载 单元测试、集成测试、系统测试
单元测试与集成测试的区别: 单元测试与集成测试相比,测试对象有所区别: ►集成测试的被测对象是单元间的组合,这里,不同模块往往是分配给不同的人员开发。集成测试主要关注不同单元模块之间的接口和配合 ►单元测试的测试对象是这些模块下的实现具体功能的单元,一般是对应详细设计中所描述的设计内容。单元测试主要关注每个具体单元模块内部的逻辑结构和功能是否正确 ►单元测试与系统测试相比,其侧重点在于发现程序设计或实现的逻辑错误,基本属于白盒测试的范畴 ․单元测试使问题及早暴露,也便于问题的定位解决,单元测试属于
2011-05-21 17:57:00 2647
转载 黑盒测试、白盒测试和灰盒测试的基本概念
作者:Aken 1. 黑盒测试 黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。 黑盒测试方法主要有等价类划分、边值分析、因—果图、错误推测等,主要用于软件确认测试
2011-05-21 17:10:00 928
原创 巧用管道实现程序的输入输出重定向
通常我们在编写程序的时候,需要我们手动输入一些数据作为我们的程序输入(同时将输出结果进行保存以便观察程序的结果),但是发现如果每次都是从控制台输入的话,我们不得不做同样的数据输入过程,这样即浪费时间,又浪费表情,编程序应该是件快乐的事情,结果被这重复的数据输入过程弄得失去了意思。特别是当我们尽心ACM程序设计的时候,测试数据多,我们就跟不能手动输入了。 怎么办,通常,我们的想法是通过在程序中进行输入输出的重定向,C/C++的方法如下: 1: include 2
2011-05-17 22:52:00 1007
原创 根据文件修改时间批量移动到指定目录
要求: 1.找到所有以.log结尾的文件。 2.将找到的文件放到临时目录/tmp 3.根据文件的修改时间,把文件归类,批量移动到以文件修改时间为目录名的目录中。 mkdir /tmp/workdir mv *.log /tmp/workdir cd /tmp/workdir for f in *.log do datedir=$(stat -c %y $f | sed 's/ .*//;s/-//g') [ -d "$datedir"] ||
2011-05-17 10:48:00 1710
原创 VC编译器下多个i++,++i的相加
1: #include "stdafx.h" 2: 3: int main(int argc, char** argv) 4: { 5: 6: int i = 1; 7: int j = (++i)+(++i)+(++i); 8: return 0; 9: }.csharp
2011-05-17 10:19:00 1059
原创 linux下遍历当前目录下的所有文件和目录
#!/bin/sh for file in ./* #遍历的文件是当前目录,其他目录可以通过修改这个参数来实现 do if test -f $file;then #是文件 echo $file fi if test -d $file;then #是目录 echo $file fi done .csharpcode, .csha
2011-05-16 21:30:00 3786 2
原创 linux下返回最近一次操作的目录
cd - 返回最近访问的目录,这个经常用得到,不需要自己输入目录 cd ~ 返回当前用户的home目录 pwd 打印当前所在路径
2011-05-16 20:55:00 7035 2
原创 linux下删除所有的link类型的文件
find ./ -type l -exec rm –f {} /; {}和/之间有空格,l表示L的小写,表示link文件类型。
2011-05-16 20:43:00 3164
转载 二叉堆
堆,很essential的数据结构,可惜严老大那本书没有怎么重视的感觉,但《算法导论》上有。可能严老大有自己的考虑。但从个人体会来看,应该还是非常有必要好好研究研究这个数据结构的,且不说堆是实现优先级队列的基础设施,更不说堆是众多图算法——如Dijkstra最短路径算法、Prim算法——的实现利器,单就堆排序及一些选择性算法——如寻找最大的K个值——而言,堆就不可忽视。我们学习和研究一种数据结构,思维曲线一般可以遵从以下三步骤:这里,我说的是针对学习和研究,在实际解决问题的过程中,往往是先分析需求,这里侧重
2011-05-16 18:41:00 869 1
转载 C++中的位域详解
位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:struct 位域结构名{ 位域
2011-05-16 14:00:00 2597
原创 数组名a和&a的区别
这里我们先看看数组名代表的是什么,这个概念可能大家有所误解,认为数组名代表的就是数组的地址,当然,数组名代表的是一个地址,但是关键是,通过这个地址,我们关注的是它能取得多大空间的数据的值,例如对于一个char 类型的地址,我们能够取得一个字节的值,对于一个int型的地址,我们能够取得4个字节的值。 这里我们以整形数组为讲解:int a[4]; a是一个地址,我们知道a其实本来的面目应该是:a+0,只不过这个0我们就省了,*(a+0)是什么呢,这个代表的就是取得第一个元素的内容,也就是
2011-05-16 12:27:00 13262 7
原创 字符串拷贝函数
这次面试腾讯,面试官要我写个字符串拷贝函数,头一天晚上一晚上没睡好,脑袋昏昏沉沉的,之前看过C++中的字符串拷贝构造函数,先入为主,也没多想就开始了String类的拷贝构造函数,写完之后,将结果给面试官看,面试官说有几个问题,说怎么用这么长时间,然后我检查问题所在,第一个是字符串拷贝后,最后没有添加'/0',因为循环判断的条件是!='/0',所以很明显没有这个,将导致严重的安全问题,产生越界和内存非法访问问题。问题在于C语言中对字符串的读取是直到找到第一个'/0'才结束。虽然马上发现了,但是明显这是平
2011-05-10 18:37:00 3504
原创 函数中的临时对象
#include "stdafx.h"#include using namespace std; class Internet;Internet * pa;Internet * pb;class Internet { public: Internet() { cout } Internet(char *name,char *address) { cout strcpy(Internet::name,name);
2011-05-02 22:21:00 568
原创 "烫"手芋头——字符串处理中出现的问题
为什么我们有时候在进行字符串处理的问题中,当我们输出字符串的值的时候,或者我们调试程序查看字符串变量的值的时候,会出现"烫"和"屯:等怪异的中文字符,其实这个问题的往往是由于要访问的地址的内容字符未被初始化,或者我们访问了非法内存。 未初始化的变量会被系统赋初值为0xCC,超过了ASCII码0-127这个范围,因此这个"字符串"被系统当成了宽字符组成的字符串,即两个字节数据组成一个字符,而0xCCCC表示的宽字符正好是乱码中的那个"烫"字。"屯"字也是一样的原因。 <br />
2011-05-01 10:50:00 1369
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人