摘要: PS:本文包含了大部分strings函数的说明,并附带举例说明。本来想自己整理一下的,发现已经有前辈整理过了,就转了过来。修改了原文一些源码的问题,主要是用char *字义字符串的问题,导致程序运行时崩溃。另外自己重写了部分测试程序,使其更能满足自己测试的需要。不当之处,还请海涵。 阅读全文
posted @ 2011-08-10 22:18 sunnylgz 阅读(2897) 评论(1) 推荐(1) 编辑
摘要: PS:原文翻译的有些地方不太确切,尤其是对于第7点static的使用的翻译容易引起误解,故稍做调整,如有妥之处,还请谅解! 任何代码的美丽不仅在于找到一个给定的问题的解决方案,还在它的简单性,有效性,紧凑性和效率(内存)。设计的代码比实际执行更难 。因此,每一个程序员当用C语言开发时,都应该保持这些基本的东西在头脑中。 阅读全文
posted @ 2011-08-05 14:54 sunnylgz 阅读(2511) 评论(24) 推荐(7) 编辑
摘要: 学习笔记(和前篇《C/C++刁钻问题各个击破之细说sizeof》一起): 1. #pragma value (value)后面的代码的对齐值取value指定值和默认值中较小的那个; 2. 在TC2.0中编译结果看:默认采用单字节对齐的方式,即不会自动填充空字节; 3. Gcc编译中,sizeof对void操作结果为1,但在vc6.0 下无法编译; 4. 测试发现:在VC 6.0下,结构体相同类型的位域成员比较紧凑,不同类型的则考虑对齐; 阅读全文
posted @ 2011-08-04 22:00 sunnylgz 阅读(231) 评论(0) 推荐(0) 编辑
摘要: Sizeof的作用非常简单:求对象或者类型的大小。然而sizeof又非常复杂,它涉及到很多特殊情况,本篇把这些情况分门别类,总结出了sizeof的10个特性: (0)sizeof是运算符,不是函数; (1)sizeof不能求得void类型的长度; (2)sizeof能求得void类型的指针的长度; (3)sizeof能求得静态分配内存的数组的长度! (4)sizeof不能求得动态分配的内存的大小! (5)sizeof不能对不完整的数组求长度; (6)当表达式作为sizeof的操作数时,它返回表达式的计算结果的类型大小,但是它不对表达式求值! (7)sizeof可以对函数调用求大小,并且求得的大小等于返回类型的大小,但是不执行函数体! (8)sizeof求得的结构体(及其对象)的大小并不等于各个数据成员对象的大小之和! (9)sizeof不能用于求结构体的位域成员的大小,但是可以求得包含位域成员的结构体的大小! 阅读全文
posted @ 2011-08-04 21:03 sunnylgz 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 试验了自定义CSS的功能,代码显示效果果然比默认状态下看着舒服多了。 阅读全文
posted @ 2011-08-04 18:41 sunnylgz 阅读(237) 评论(0) 推荐(0) 编辑
摘要: C语言中,const限定词指定了一个不可修改的变量,但并不是常量。它可以使编译器帮助我们保证某些变量不被意外修改,例如指针或引用传递时,加上const可保证我们的源数据不被破坏。const修饰指针时情况比一般情况下要复杂许多,先看下面这个例子:1 const char * p1;//p1指向的内容不可变2 char const * p2;//p2指向的内容不可变3 char * const p3;//p3不可变,但其指向的内容可变通过注释可以看出,当const在*前时,其修饰的是指针指向的内容,但指针本身是可变的,我们可以用它来遍历一个源数组或其他一组不想被意外破外的数据;当const在*后时 阅读全文
posted @ 2011-08-02 15:37 sunnylgz 阅读(1078) 评论(4) 推荐(0) 编辑
摘要: 1、以32位float为例:计算机中表达浮点数时分为符号(s),指数(e),尾数(f)三部分,当表示32位float时各部分长度分别为:s(1位),e(8位),f(23位) 。浮点数大小是(-1)^s×2^(e-127) ×1.f。注意:符号位s=1,表示负数;s=0表示负数;指数e为移码方式存储,实际值=存储值-127;尾数f表示了实际数值中的二进制小数部分,整数部分为1。指数e最大值为254,IEEE 745规定当e=255,f=0时表示INF,参考后文(原文摘抄)部分举例说明:当s=0,e=128,f=0时,存储值为:0x4000 0000,真实值为1.0× 阅读全文
posted @ 2011-08-02 10:45 sunnylgz 阅读(526) 评论(1) 推荐(0) 编辑
摘要: 1、释放动态内存时遇到“user breakpoint called from code at 0x********”这个bug多在调用free函数来释放malloc的内存时出现,前先曾多次遇到,但一直未找出问题原因。在网上查了一下,有些写得挺复杂,涉及到了操作系统推维护的内容,现在还不有接触 到这一块,所以没有细看。其他有说到重复释放动态内存,修改动态内存指针或者破坏了系统的动态内存结束标志都会导致这个bug。后来查看自己的代码,发现 重复释放的问题倒是没有,却在操作内存时有一处频繁操作超出动态申请内存之外的单元,故导致这个问题的出现。问题总结:在动态内存释放时出现,多由于动态内存使用不当1 阅读全文
posted @ 2011-08-02 10:07 sunnylgz 阅读(1004) 评论(5) 推荐(0) 编辑
摘要: 在C语言开发中,宏定义是一个非常有用的工具,它可以使我们的代码更容易理解,更容易维护。如查一个常量在多处被使用,且今后可能会根据不同需要而修改的话,将其define一下那是再好不过了。除此之外,宏定义还有其他的功能,了解它,将更好地辅助我们开发C程序。先看个例子#define Conn(x,y) x##y #define ToString(x) #x #define ToChar(x) #@x这几个宏定义中分别用到了“##”、“#”,“#@”它们的功能分别是:1、粘接操作符##——连接两个宏名,注意所连接的是宏名,而不是其所指代的值;如int Conn(a,b);定义了一个int型变量ab,以 阅读全文
posted @ 2011-08-02 09:50 sunnylgz 阅读(3482) 评论(3) 推荐(1) 编辑