C
阿磊2013
这个作者很懒,什么都没留下…
展开
-
rindex函数原型
相关函数index,memchr,strchr,strrchr表头文件#include定义函数char * rindex( const char*s,int c);函数说明rindex()用来找出参数s字符串中最后一个出现的参数c地址,然后将该字符原创 2009-08-06 16:16:00 · 2265 阅读 · 1 评论 -
Linux中brk(),sbrk(),mmap(),malloc(),calloc()的异同
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理下将虚拟转载 2012-05-18 19:14:33 · 3510 阅读 · 1 评论 -
C语言宏定义技巧(常用宏定义)
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字转载 2011-11-16 19:56:04 · 710 阅读 · 0 评论 -
大端,小端问题
<br /><br />试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1<br />解答:int checkCPU() { { union w { int a; char b; } c; c.a = 1; return (c.b == 1); } } 剖析:嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little- endian模式的CPU对操作数的存放方式是从转载 2011-04-26 22:25:00 · 1102 阅读 · 0 评论 -
c语言获取时间
<br /><br />C语言中如何获取时间?精度如何?<br />1 使用time_t time( time_t * timer ) 精确到秒<br />2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒<br />3 计算时间差使用double difftime( time_t timer1, time_t timer0 )<br />4 使用DWORD GetTickCount() 精确到毫秒<br />5 如果使用MFC的CTime类,可以用CTim转载 2011-03-02 20:39:00 · 2542 阅读 · 0 评论 -
mmap函数
<br />最近在看一本书是看到了这个函数,书中没有讲解这个函数的用法,就上网查了下,先放到下面,方便以后查阅。<br />功能描述: <br />mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。 <br />基于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新。如果st_atime字段在前述的情况下没有得到更新,首次对映原创 2010-10-30 22:35:00 · 1319 阅读 · 0 评论 -
由关于malloc的一个争论引起的探究
前几天,在听一节课时,关于malloc返回的地址是物理地址还是线性地址,跟人进行了激烈的讨论。当时脑子也不知怎么了,硬是觉得返回的是物理地址,还写了一个程序进行验证。#include #include int main(){char * p = (char *)malloc(sizeof(char));printf("address=%x/n",p);return 0;}我的理由是连续运行多次这个程序,每次输出的地址并不相同(我当时认为线性地址的话,每次输出地应该是一样的),然后又怎么怎么着。跟那人进行了激原创 2010-10-12 21:05:00 · 5855 阅读 · 22 评论 -
fmod函数
<br /> 今天在csdn论坛上转,看到了有人用到了fmod这个函数来回答一个问题。以前没注意这个函数,就上网搜了一下:<br /> 原型:extern float fmod(float x, float y); 用法:#include <math.h> 功能:计算x/y的余数 说明:返回x-n*y,符号同y。n=[x/y](向离开零的方向取整) 举例: // fmod.c #include <sy原创 2010-06-17 12:21:00 · 39848 阅读 · 0 评论 -
C语言中如何使用宏 包括单双井号 可变参数
C语言中如何使用宏 包括单双井号 可变参数 收藏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:#define转载 2010-05-16 21:24:00 · 1192 阅读 · 0 评论 -
read函数乱码问题的解决
今天写了个c程序,其中有一段代码是,用read从一个文件中读取内容,然后使用printf将读取的内容显示出来。可是读取的显示出来的内容总有几个地方是乱码,而且还有一部分内容是重复的。什么原因?过了一会儿,反应过来了,read函数在读取内容时,并不会在读取的内容的最后添加字符串的结束标志/0,因此读取出来的内容并不是一个合法的字符串,要自己添加一个字符串结束符才行。char原创 2010-04-26 21:02:00 · 4416 阅读 · 2 评论 -
关于类型提升问题
下面一个小程序,演示了c语言中类型提升带来的一个小问题。 //test.c#include int array[]={23,34,45,56,67,78};#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))int main(){ int d=-1, x=3; if(原创 2009-10-23 18:26:00 · 1327 阅读 · 0 评论 -
c和java的一点小区别
c语言不支持函数重载,如果定义两个同样的函数,会报错。eg://test.c#include #include int add(int a,int b){ return a+b;}int add(int a,int b,int c){ return a+b+c;}int main(int argc,char * argv[原创 2009-08-15 20:28:00 · 871 阅读 · 0 评论 -
popen函数
功能说明:建立管道I/O头文件:#include 函数声明:FILE * popen(const char * command,const char * type);函数说明:popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh/ -c 来执行参数command的指令。参数type可使用“r“表示读取,”w“表示写入,按照这个type值,p原创 2009-08-06 19:56:00 · 1205 阅读 · 0 评论 -
c程序的存储布局——数据段和缓冲段
输入如下程序: //bss.c#include int a[4]; int main(){ printf("hello world!/n"); return 0;} 编译:gcc bss.c -o test 注释掉int a[4]后,重新编译gcc bss.c -o test1 然后修改程序 int a[4]原创 2009-08-05 15:53:00 · 982 阅读 · 0 评论 -
使用errno调试程序
C语言提供了一个全局变量errno来提供程序执行的一些情况。errno在errno.h中声明。下面这个例子试图打开并不存在的一个文件,然后输出errno的值。 #include #include #include #include #include int main(){int fd;errno=0; fd=open("xxx"原创 2009-08-06 16:20:00 · 1226 阅读 · 0 评论 -
strcspn和strspn函数
1、strcspn头文件:#inclued定义函数:size_t strcspn(const char *s, const char * reject);函数说明:strcspn()从参数s 字符串的开头计算连续的字符, 而这些字符都完全不在参数reject所指的字符串中. 简单地说, 若strcspn()返回的数值为n, 则代表字符串s 开头连续有n 个字符都不含字符串r转载 2014-01-28 09:22:18 · 8162 阅读 · 4 评论