C语言编程
文章平均质量分 72
百云在飘
这个作者很懒,什么都没留下…
展开
-
strchr()库函数使用(顺次建立多层目录)
1.函数说明 功能:查找字符串中的第一个出现的指定字符 头文件:#include 声明: char *strchr(const char *, int c) 描述:用来找出参数s字符串中第一个出现的参数c地址,将出现的该字符的地址返回 返回值:如果找到指定的字符,则返回该字符串所在的地址,否则返回0 2.顺次建立多层目录 #i原创 2009-02-17 00:48:00 · 624 阅读 · 0 评论 -
函数调用传值、传地址与引用的选择
函数调用传值、传地址与引用的选择原创 2010-08-29 01:59:00 · 1619 阅读 · 0 评论 -
C/C++中的函数参数传递机制
本文论述了在 C 和 C++ 中函数调用的参数传递机制;同时附带说明了函数返回值的一些问题。本文示例使用的是VC++6.0。转载 2010-08-29 01:03:00 · 657 阅读 · 0 评论 -
while (1) 和 for (;;)
一、 背景 今天在网上看到一篇blog,文章题目是《C代码优化方案》,其中有一节说到while(1)和for(;;)两种无线循环,哪种效率更高? 但是,在现代编译器上,其实两种无线循环效率都是一样的。 二、 以前为什么会出现for(;;)比while(1)的无线循环的效率高呢? 在《C代码优化方案》中,这样写道: 在编程中,我们常常需要用到无限循环,常用的两种方法是while (1) 和 for (;;)。这两种方法效果完全一样,但那一种更好呢?然我们看看它们编译后的代码: 编译前:原创 2010-09-18 16:18:00 · 2554 阅读 · 0 评论 -
再谈内存对齐
一、问题提出 怎样的数据访问是对齐的?很简单 aligned: C内存地址%数据大小 ==0;自然对齐 unaligned:不满足上述规则,这个数据是非对齐的 简单的说,就是char类型无对齐要求;short类型的数据地址最后一位是0;int型数据地址最后两位为0; 非对齐访问对X86//Sparc这类芯片会导致访问开销问题,对于ARM/MIP/ACPHA/IA-64这类CPU会导致异常。 本文的所有讨论基于32位的RISC/CISC CPU和GCC编译器 二、对齐处理 内存对齐的几个处理场原创 2010-09-24 02:44:00 · 899 阅读 · 0 评论 -
使用 getopt()和getopt_long 进行命令行处理
引言 在早期的 UNIX® 中,其命令行环境(当时的唯一用户界面)包含着数十种小的文本处理工具。这些工具非常小,通常可很好地完成一项工作。这些工具通过较长的命令管道链接在一起,前面的程序将其输出传递给下一个程序以作为输入,整个过程由各种命令行选项和参数加以控制。 正是 UNIX 的这方面的特征使其成为了极为强大的处理基于本文的数据的环境,而这也是其在公司环境中的最初用途之一。在命令管道的一端输入一些文本,然后在另一端检索经过处理的输出。 命令行选项和参数控制 UNIX 程序,告知它们如何动作。作为转载 2010-12-18 07:03:00 · 639 阅读 · 0 评论 -
把绝对时间转换成当前时间
linux下把从1977年经过的秒数转换为当前时间 #include #include #include int main(int argc, char **argv) { time_t timep = 1295837391; if (argc原创 2011-01-30 11:26:00 · 4676 阅读 · 1 评论 -
内存调试技巧 C 语言最大难点揭秘
本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终没有彻底解决,它们可能严重影响应用程序,并且很少有开发团队对其制定明确的管理计划。但好消息是,它们并不怎么神秘。转载 2011-03-16 15:03:00 · 834 阅读 · 0 评论 -
GDB中应该知道的几个调试方法
七、八年前写过一篇《用GDB调试程序》,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题。这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来。希望大家补充。 一、多线程调试 多线程调试可能是问得最多的。其实,重要就是下面几个命令: info thread 查看当前进程的线程。 thread 切换调试的线程为指定ID的线程。转载 2011-05-12 17:03:00 · 670 阅读 · 0 评论 -
高科技:GDB回溯调试
也许大家知道,GDB 版本7.0 (2009年9月release) 会是第一次开始支持Reversable Debugging (回溯调式技术),这是一种可以让在debug程序时当我们运行单步调试或是运行到断点时,可以以逆向执行程序的一种技术。(这是GNU的新闻链接) 下面是GDB7.0版本所支持的回溯调试的命令,其中包括,continue,step,以及调试方向的设置。 reverse-continue (‘rc’) — 继续程序运行到断点,但是是逆向运行程序。 reverse-finish —转载 2011-05-12 17:05:00 · 1657 阅读 · 0 评论 -
打印质数的各种算法
打印质数的算法应该是学习计算机编程的一个经典的问题,在这里想给大家展示一些方法,相信这些方法会对你的编程有一定的启发作用。请你注意几点, 实际应用和教学应用有很大的差别。 最后的那个使用编译时而不是运行时的方法大家可以重点看看。 教科书的示例 首先,先给一个教科书的示例。下面这个示例应该是教科书(至少是我上大学时的教科学)中算法复杂度最好的例子了。其想法很简单,先写一个判断是否是质数的函数isPrime(),然后从1到n分别调用isPrime()函数来检查。检查是否是质数的算法是核心转载 2011-05-05 18:28:00 · 819 阅读 · 0 评论 -
可视化的数据结构和算法
还记得之前发布过的那个关于可视化排序的文章吗?在网上又看到了一个旧金山大学David Galles做的各种可视化的数据结构和基本算法的主页,网址在这里,大家可以看看。我把这个页面的目录列在下面并翻译了一下,大家可以直接点击了。 不知道国内的教育有没有相关的教学课件,至少在我大学的时候是没有的。 基础 Stack栈: 数组实现 Stack栈: 链表实现 Queues队列: 数组实现 Queues队列: 链表实现 Lists列表: 数组实现 ( java 版演示) L转载 2011-05-09 16:30:00 · 741 阅读 · 0 评论 -
深入理解C语言字节对齐
什么是对齐?为什么要对齐?以及对齐的实现。。。转载 2010-08-29 01:17:00 · 539 阅读 · 0 评论 -
arm汇编语言调用C函数之参数传递
对于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,关于ATPCS的详细内容可以查看ADS1.2 Online Books ——Developer Guide的2.1节。转载 2010-07-31 10:54:00 · 760 阅读 · 0 评论 -
strlen和sizeof函数区别(深入理解)
1.函数类型 #include size_t strlen(const char *s); size_t sizeof()2.本质区别 本质上,strlen是函数,而sizeof是算符。strlen需要进行一次函数调用,而对于sizeof而言,因为缓冲区已经用已知字符串进行了初始化,起长度是固定的,所以sizeof在编译时计算缓冲区的长度。sizeof后如果是类型必须原创 2009-02-24 22:45:00 · 11853 阅读 · 7 评论 -
单元测试中如何对可变参函数打桩
我觉得,整个项目最辛苦的阶段是UT,为什么?因为UT的工作又细致又繁琐。工作量往往都比预期的要大。我用过三个UT工具。最方便的是北研的镜像测试工具(Mirror Test Tools,MTT)是应用镜象测试技术理论,将脚本(python)化的变量控制与桩驱动应用于单元测试与集成测试,以达到高效率高质量的支撑白盒测试的目的,为公司使用C语言的产品提供通用的调测服务。接着是CUNIT,是应用在原创 2009-08-29 11:35:00 · 4919 阅读 · 0 评论 -
内存(肖舸的笔记)
内存可以说是C和C++语言学习的关键点。这里说一点我的理解,一家之言,欢迎拍砖哈。内存要想理解透彻,首先要理解内存编址。即不同的内存条,内存模块,插到机器上,具体对应的内存地址是多少。最开始的PC机,IBM PC XT,只有640k内存。IBM是这么规划的,最低的128k,是BIOS的地址,毕竟BIOS也是汇编语言,它也需要合法地址,才能被CPU正确运行。5转载 2009-09-03 22:10:00 · 1065 阅读 · 0 评论 -
表达式和基本语句
Normal 0 7.8 磅 0 2 MicrosoftInternetExplorer4 <!-- /* Font Definitions */ @font-face {font-famil原创 2009-09-16 21:40:00 · 1250 阅读 · 0 评论 -
什么是堆?什么是栈?
一 英文名称 堆和栈是C/C++编程中经常遇到的两个基本概念。先看一下它们的英文表示: 堆――heap 栈――stack二 从数据结构和系统两个层次理解 在具体的C/C++编程框架中,这两个概念并不是并行的。深入到汇编级进行研究就会发现,栈是机器系统提供的数据结构,而堆是由C/C++函数库提供的。这两个概念可以从数据结构和系统两个层次去理解: 1、从数据结构转载 2009-12-13 18:48:00 · 1165 阅读 · 0 评论 -
从一道面试题看指针与数组的区别
指针是C语言的精华,它是一柄“双刃剑”,用的好与坏就看使用者的功力了。下面就一道面试题,看一下指针与数组的区别。 char *p1, *p2; char ch[12]; char **pp; p1 = ch; pp = &ch; p2 = *pp; 问p1和p2是否相同?题目如上,找出其中的不妥之处。 首先,数组ch是没有初始化的。其次,一个比较隐含的地方转载 2009-12-13 19:11:00 · 1256 阅读 · 0 评论 -
memcpy和memmove的区别与实现
区别:从DESCRIPTION看来,两者的功能基本相同,唯一不同的是,当 dest 和 src 有重叠的时候选用不同的函数可能会造成不同的结果。不妨写个小程序来测一下:0 #i nclude 1 #i nclude 23 int main()4 {5 int i = 0;6 int a[10];7 8 for(i; i 9原创 2010-03-22 22:41:00 · 645 阅读 · 0 评论 -
Segment fault时使用gdb跟踪core文件
1. Segment fault时core文件生成设置1.1. 修改/etc/profile/etc/profile 中ulimit那一行修改成:ulimit -S -c unlimited 然后sh /etc/profile , 就可以生效,如有进程segment fault ,可以用gdb core 文件看死在哪里了。 1.2 确保后台进程也产生coredum原创 2010-04-13 23:21:00 · 1729 阅读 · 0 评论 -
声明
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty原创 2010-04-17 14:40:00 · 675 阅读 · 0 评论 -
随机文件与随机函数
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <object class原创 2010-05-02 13:22:00 · 1023 阅读 · 0 评论 -
Hash函数与取模运算
1. hash函数哈希表也称散列表,是一种数据结构,它可以提供快速的插入操作和查找操作,不论有多少数据项,插入与删除只需要接近常量的时间:O(1)时间级。但哈希表也有缺点,它是基于数组的,数组一旦被创建,就难以扩展。某些哈希表被填满时,性能急剧下降。,所以程序员必原创 2010-05-05 23:16:00 · 12467 阅读 · 0 评论 -
话说结构体
1. 结构体变量的声明先看下面这个例子:struct {int number;char name [NAME_LEN+1];int on_hand;} part1,part2;这个两个结构体变量都有3个成员:number(零件的编号),name(零件的名称)和on_hand(现有数量)。struct{…}指明了类型,而part1和part2则是具有这种类型的变量。但原创 2010-05-16 09:45:00 · 743 阅读 · 0 评论 -
php调用C函数时如何使用zend_parse_parameters
一 zend_parse_parameters原型int zend_parse_parameters ( int num_args TSRMLS_DC, char* type_spec, ... );第一个参数是传递给函数的参数个数,通常的做法是传给它ZEND_NUM_ARGS()。这是一个表示传递给函数参数总个数的宏。第二个参数是为了线程安全,总是传递TSRMLS_CC宏。第三个原创 2011-11-09 14:38:54 · 3124 阅读 · 0 评论