C
文章平均质量分 51
MJN
programming and sharing.
展开
-
整型溢出
<br />1、发生条件:<br />两个无符号整型操作数的算术运算中,无溢出情况;<br />若一个操作数是有符号整数,另一个为有符号整数,则有符号数会被转换为无符号整数,无溢出情况;<br />只有当两个操作数是有符号整数时,溢出才会有可能发生,而且溢出的结果是未定义的,作出任何假设都是不安全的。<br />2、判断是否溢出:<br />以下的代码并不可靠,<br />if(a + b < 0){ complain();} <br />正确的方式1:将a和b都强制转换为无符号整数,<b原创 2010-09-12 22:47:00 · 1528 阅读 · 0 评论 -
sizeof操作符
sizeof是一种操作符, 返回一个对象或类型的长度, 返回类型是size_t(即unsigned int的别名), 长度的单位是字节.形式如下:sizeof(type name);sizeof(expr);sizeof expr;在32位的机器上, 有: printf("%d\n", sizeof(char)); /* print: 1 */原创 2011-10-23 14:08:33 · 2688 阅读 · 0 评论 -
warning: 'struct XXX' declared inside parameter list
<!--.mjn * {font-family:Courier New; padding:0px; margin:0px}.mjn div.related {margin:4px 4px 4px 100px; font-style:italic}.mjn h1 {font-size:1.3em; font-weight:bold; border-bott原创 2013-06-24 17:35:31 · 10308 阅读 · 0 评论 -
字节顺序(byte order)
<!--.mjn * {font-family:Courier New; padding:0px; margin:0px}.mjn div.related {margin:4px 4px 4px 100px; font-style:italic}.mjn h1 {font-size:1.3em; font-weight:bold; border-bott原创 2013-06-20 23:37:28 · 4355 阅读 · 0 评论 -
指向函数的指针
你知道以下声明语句的含义吗?float (*h(int, void (*)(int)))(int);以下是一个变量指针的定义语句:float* pf;以下是一个普通函数的声明语句:float f();请看以下声明语句:float* g();因为()的优先级高于*, 所以相当于:float* (g());g是一个函数, 返回值为float*, 参数为void而floa原创 2013-03-19 22:47:18 · 954 阅读 · 0 评论 -
atoi(c89)
<!--.mjn * {font-family:Courier New; padding:0px; margin:0px}.mjn h1 {font-size:1.2em; font-weight:bold; border-bottom:1px solid green; margin:10px 0px}.mjn h2 {font-size:1em;原创 2013-06-15 02:17:05 · 8148 阅读 · 1 评论 -
在线手册(Online Manual)
HP C Reference: http://h21007.www2.hp.com/portal/download/files/unprot/hpux/HP%20C%20HPUX%20Reference%20Manual.pdf原创 2013-11-19 14:42:21 · 1318 阅读 · 0 评论 -
HP-UX的某些特性
aCC编译器代码中若有标准库的代码, 需要加-AA选项.原创 2013-10-08 16:20:01 · 938 阅读 · 0 评论 -
字符二维数组char[][]与char**
test原创 2013-11-18 19:20:53 · 11368 阅读 · 0 评论 -
malloc失败的另一种原因
在C语言中, 执行到malloc程序core的时候, 一般人的第一反应是内存空间不足. 常见的代码为:#define SIZE 100int* p = (int*)malloc(100*sizeof(int));但是, 事实情况是, 内存还多的很. 不可能是空间的原因.有的C编译器对没有声明的函数, 是不报错的(有的连警告都没有, C编译器认为程序员永远是正确的). 糟糕的是, C编原创 2013-11-18 18:32:55 · 7398 阅读 · 0 评论 -
cygwin中动态库链接的问题
问题的出现(这里解释得比较累赘, 要找到答案, 可以直接进入第二章节)看书(Ruminations on C++)时, 以章节为单位写了一些独立的小程序(使用cygwin g++作为编译器, sublime text 2作为编辑器). 以下是目录结构, 后来将写日志的函数提取出来, 放到common/common.h(.cpp), 并生成libcommon.so动态库, 供其他程序调用原创 2013-10-31 23:22:06 · 7625 阅读 · 3 评论 -
book list about C
<!--.mjn * {font-family:Courier New}.mjn h1 {font-size:1.2em; font-weight:bold; margin-bottom:10px; padding-top:10px; border-top:2px solid green}.mjn br {padding:0px; margin:0px}原创 2013-04-22 01:50:15 · 1147 阅读 · 1 评论 -
do {} while(0)
<!--.mjn * {font-family:Courier New; padding:0px; margin:0px}.mjn .related {font-style:italic}.mjn h1 {font-size:1.3em; font-weight:bold; border-bottom:1px solid green; color:#99翻译 2013-06-23 20:33:51 · 914 阅读 · 0 评论 -
strcmp函数的实现
在本文中,为了避免命名冲突,改变了函数的名称(如:strcmp改为strCmp),另一篇文章中采用命名空间来解决此问题(strlen, strcpy, strcmp函数的实现,另外,此篇文章中的代码实现也更加紧凑)(此句话添加于2012/10/04)已知函数原型如下,请实现该函数。int strCmp(const char *str1, const char *str2);我的C语言代原创 2011-11-02 16:06:47 · 3807 阅读 · 0 评论 -
strlen函数的实现
/** * @date : 2011-11-02 * @author : MJN * @function : count the number of characters(before '\0') * @return : the number of characters */size_t strLen(const char *str){ size_t len原创 2011-10-23 12:55:52 · 874 阅读 · 0 评论 -
strcpy函数的实现
问题如下:已经函数strCpy的原型如下为char *strCpy(char *strDst, const char *strSrc);1)实现该函数;/** * @date : 2011-11-02 * @author : MJN * @function : copy from strSrc to strDst(include '\0') * @retur原创 2011-10-09 17:44:51 · 646 阅读 · 0 评论 -
内联函数与宏的区别
内联函数形式如下:inline int fac(int i){ return i * i;}内联函数像普通函数一样, 要进行参考类型检查, 但执行内联函数要比执行普通函数更高效, 因为调用内联函数的地方不需要中断调用, 在编译的时候, 内联函数被嵌入到目标代码中.适用场合:1) 代码短小, 里面不般不包含循环, 判断语句2) 需要被重复调用宏定义形式如下原创 2011-10-23 15:54:49 · 784 阅读 · 0 评论 -
malloc/free与new/delete的区别
1. malloc/free是C语言中的标准库函数, new/delete是C++中的运算符.2. 若动态创建的对象是类类型, 用new时, 自动调用该对象的默认构造函数:class Test{public: Test() {} ~Test() {}};int main(){ Test *t = new Test(); /* do so原创 2011-10-22 00:23:22 · 748 阅读 · 0 评论 -
struct成员的内存连续性
某公司的笔试题如下已知如下代码, 求输出结果.#include #include struct Test{ char arr_a[4]; char arr_b[32];};int main(){ Test a1; strcpy(a1.arr_b, "hello world"); strcpy(a1.arr_a, "hello");原创 2011-10-20 22:37:47 · 819 阅读 · 0 评论 -
main函数的返回值
<br />以下main函数包含一个不易察觉的错误,<br />main(){ //do something} <br />函数main与其他任何函数一样,如果并未显式声明返回类型,那么函数返回类型就默认为整型。如果没有显式返回一个值,则隐含地返回了某个“垃圾”整数,只要该数值不被用到,则无关紧要。main函数的返回值是来告知操作系统该函数的执行是成功还是失败。返回0代表成功,返回非0表示程序失败。<br />我通常这样写:<br />int main(){ //do som原创 2010-09-12 23:25:00 · 1071 阅读 · 0 评论 -
将字串s和t连接成单个字串r
代码如下:char *r;r = malloc(strlen(s) + strlen(t) + 1);if(!r){ cout 注意:strlen()函数并不计算结束标志。原创 2010-09-12 16:16:00 · 1059 阅读 · 1 评论 -
strlen, strcpy, strcmp函数的实现
在Bjarne Stroustrup(C++创始人,他的主页)所写的《The C++ Programming Language, special edition》书中的第6章6.6节的第10题练习题中,要求实现strlen, strcpy, strcmp三个函数,2011年11月份我已发过两篇文章来实现此三个函数(字符串处理函数的实现,strcmp函数的实现),以前的实现代码中,为了避免命名冲突,原创 2012-10-04 23:11:18 · 3103 阅读 · 0 评论 -
字符串处理函数的实现
在本文中,为了避免命名冲突,改变了函数的名称(如:strlen改为strLen),另一篇文章中采用命名空间来解决此问题(strlen, strcpy, strcmp函数的实现,另外,此篇文章中的代码实现也更加紧凑)(此句话添加于2012/10/04)/** * mystr.h * string function prototype * @author : MJN * @create原创 2011-11-28 16:00:59 · 1848 阅读 · 0 评论 -
计算无符号整型变量的二进制中的1的个数
<!--.mjn * {font-family:Courier New}.mjn br {padding:0px; margin:0px}.mjn p {margin:0px; padding:0px}-->最简单的方法是: 遍历每个位int bitcount(unsigned int x) { int b; f原创 2013-06-02 21:08:20 · 2400 阅读 · 0 评论 -
输出整型变量的十进制字符值
<!--.mjn * {font-family:Courier New}.mjn br {padding:0px; margin:0px}.mjn p {margin:0px; padding:0px}-->The C Programming Language 2nd(ch4.10 Recursion)的实现为(参数n不能是最小整数):原创 2013-06-01 16:54:09 · 1977 阅读 · 0 评论 -
(AIX)ld: 0711-244 ERROR: No csects or exported symbols have been saved
当使用IBM AIX系统的xlc编译器编译动态库时, 出现如题所示的错误(所编译的源文件内容为空):$ touch t.cpp$ cat t.cpp$ xlc -c -o t.o t.cpp"t.cpp", line 1.0: 1540-0809 (W) The source file is empty.$ xlc -qmkshrobj -o libt.so t.o ld: 07原创 2013-04-24 23:31:46 · 2901 阅读 · 0 评论 -
C project source that could be learnt
RedisGnuCashgemmes原创 2013-04-29 22:36:02 · 789 阅读 · 0 评论 -
"整数相加溢出"引出的思考
前段时间在修复某系统的bug时, 发现一位同事在代码中加入了类似如下的语句:int a = 0;int b = 0;/*some codes*/if ( a + b <= 0) { /*some codes: invalid a or b*/}同事解释说: 用来判断溢出. 听了解释后, 我点头称是, 觉得这是个好招.刚才, 在看"C Traps and Pitfal原创 2013-03-17 15:22:31 · 1063 阅读 · 0 评论 -
GCC的默认C标准
若没有使用-std参数来指定GCC的C标准, 则使用默认的GNUC90标准(GCC对C99和C11支持得不完整), GNUC90标准在C90标准的基础上进行了扩展.熟知的C标准大概有三种: c90( or c89), c99, c11. 分别于1990年, 1999年, 2011年发布.在编译的时候指定c90标准: -ansi, -std=c90 or -std=iso9899:1990;原创 2013-03-02 12:46:24 · 11132 阅读 · 1 评论 -
使用memset将指针的值置0
最近在某个系统中看到一段古怪的代码, 我更改代码的变量名称, 大致意思如下:void f(const char* p) { if (p == NULL) { memset(&p, 0, sizeof(p)); }}void g() { char* p = NULL; f(p);}函数f中的第二行代码: memset(&p, 0, sizeof(p));原创 2013-02-16 22:50:51 · 4869 阅读 · 0 评论 -
time_t
time_t是一种时间类型,一般用来存放自1970年1月1日0点0时0分开始的秒数。在标准头文件中定义的类型别名,具体类型是平台依赖的原创 2015-01-20 20:18:23 · 11612 阅读 · 0 评论