![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 50
situzhuge
这个作者很懒,什么都没留下…
展开
-
C/C++:memmove、memcpy、strcpy三者的区别
http://blog.csdn.net/jiang1013nan/archive/2009/12/26/5073116.aspxstrcpy只能处理字符串;如果拷贝带有特殊字符的串,就只能用memcpy或memmove。memcpy和memmove功能基本上差不多,但是当源串和目标串有Overlap时,memmove可以正确处理,memcpy则不行。memcpy()和memmove()都是C语言中的库函数,在头文件string.h中,其原型分别如下: void*memcpy(void*dst,cons转载 2010-08-09 14:57:00 · 667 阅读 · 0 评论 -
【c】linux socket编程
linux socket 编程(C语言)最近看了一些网络编程的书籍,一直以来总感觉网络编程神秘莫测,其实网络编程入门还是很容易学的,下面这些代码是我在linux下编写的,已经运行过了,编译之后就可以运行了。有不足之处希望大家多多指出,共同学习交流。 套接字是一种进程间的通信的方法,不同于以往介绍的进程间通信方法的是,它并不局限于同一台计算机的资源,例如文件系统空间,共享内存转载 2011-11-18 18:17:05 · 629 阅读 · 0 评论 -
进程间通信学习小结(共享内存)
要使用共享内存,应该有如下步骤:1.开辟一块共享内存 shmget()2.允许本进程使用共某块共享内存 shmat()3.写入/读出4.禁止本进程使用这块共享内存 shmdt()5.删除这块共享内存 shmctl()或者命令行下ipcrm共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自转载 2011-11-21 09:55:43 · 549 阅读 · 0 评论 -
【c】GDB 学习
一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。cc -g tst.c -o tst gdb tst翻译 2011-11-09 16:16:30 · 563 阅读 · 0 评论 -
[C]复杂表达式中的序列点
序列点是一个时间点(在整个表达式全部计算完毕之后或在||、&&、? : 或逗号运算符处, 或在函数调用之前), 此刻尘埃落定, 所有的副作用都已确保结束。ANSI/ISO C 标准这样描述:在上一个和下一个序列点之间, 一个对象所保存的值至多只能被表达式的计算修改一次。而且前一个值只能用于决定将要保存的值。第二句话比较费解。它说在一个表达式中如果某个对象需要写入, 则在同一转载 2011-11-15 10:48:36 · 433 阅读 · 0 评论 -
【C】你能用几种方法交换两个变量的值?------存储器别名的影响
找工作的时候,笔试,面试阶段,我们经常看到这么一道题:不用临时变量,如何交换两个变量的值?很多同学不假思索,写下如下代码:#include int swap1(int *a, int *b) { *a = *a+*b; *b = *a-*b; *a = *a-*b; return 0; } int swap2转载 2011-12-05 16:39:47 · 1234 阅读 · 0 评论 -
【C】为什么静态变量会被初始化为0,而自动变量却不会被初始化?
把自动变量初始化为0的代价,将会增加函数调用的代价。C语言非常注重运行速度。然而,把全局变量区初始化为0,仅仅在程序启动时候产生成本。这也许是这个问题的主要原因。更精确的说,C++并不把静态变量初始化为0,他们有自己的默认值,对于原生类型(native types)来说,这意味着0。转载 2011-12-05 16:53:53 · 4388 阅读 · 0 评论 -
进程间通信学习总结2---信号量互斥同步
实现线程之间同步采用互斥锁,或条件变量,但互斥锁只有0,1两种状态,适合于线程对共享资源独占访问,很多时候每个资源可以同时被有限个线程访问,此时互斥锁将无法满足;条件变量同步也同样存在这种问题。信号量实际是一种非负整形计数器,可以很好的控制线程之间资源访问,互斥锁能实现的功能,信号量同样可以。信号量控制资源共享主要是PV原语操作, PV原语是对整数计数器信号量sem的操作。一次 P操作使 se转载 2011-12-05 15:38:33 · 1221 阅读 · 0 评论 -
序点
序点:什么是序点?简而言之,序点就是这么一个位置,在它之前所有的副作用已经发生,在它之后的所有副作用仍未开始,而两个序点之间所有的表达式或者代码执行的顺序是未定义的!序点规则1:在前一个序点和后一个序点之前,也就是两个序点之间,一个值最多只能被写一次;这里,在两个序点之间,a被写了两次,因此,这种行为属于未定义。 序点规则2:进一步说,先前的值应该是转载 2011-12-05 18:17:07 · 1253 阅读 · 0 评论 -
my_itoa
void _my_itoa(CHAR_T * desString , const unsigned int srcNum, const int arry_len){ int num_len = 0; unsigned int tempNum = srcNum ; unsigned int tempNum_l = src翻译 2011-12-14 12:13:01 · 599 阅读 · 0 评论 -
[C]calloc() 和malloc() 有什么区别?
calloc() 和malloc() 有什么区别?利用calloc 的零填充功能安全吗?free() 可以释放calloc() 分配的内存吗, 还是需要一个cfree()?calloc(m, n) 本质上等价于p = malloc(m * n);memset(p, 0, m * n);填充的零是全零, 因此不能确保生成有用的空指针值或浮点零值(参见第5章)。free()转载 2011-11-14 11:30:48 · 672 阅读 · 0 评论 -
【c】c语言语法知识点总结 1
1.这样的初始化有什么问题?char *p = malloc(10); 编译器提示“非法初始式” 云云。答:这个声明是静态或非局部变量吗?函数调用只能出现在自动变量(即局部非静态变量) 的初始式中。因为静态变量的地址必须在编译的过程中就确定下来而malloc()申请的内存地址是在运行时确定的。2. *p++ 自增p 还是p 所指向的变量?答:后缀++ 和-- 操作符本质转载 2011-06-11 13:05:00 · 1526 阅读 · 0 评论 -
判断系统大小端
#includeint is_little_endian(void ){ unsigned int tmp=0x4567; char * ch = (char * )&tmp; if(ch[0]==(char)0x67) { printf("little_endian/n"); return 1; //小转载 2011-06-11 12:31:00 · 571 阅读 · 0 评论 -
strlen() 与 sizeof() 区别
strlen计算不包含终止NULL字节的字符串长度,而sizeof则计算包括终止NULL字节的缓冲区长度。两者之间的另一个差别是,使用strlen需进行一次函数调用,而对于sizeof而言,因为缓冲区已用已知字符串进行了初始化,其长度是固定的,所以它在编译时计算缓存区长度。转载 2010-08-09 15:59:00 · 430 阅读 · 0 评论 -
在Linux中创建静态库和动态库
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。 在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。 第1步:编辑得到举例的程序--hello.h、hello.c和main.c;hello.h(见程转载 2010-09-11 11:50:00 · 395 阅读 · 0 评论 -
C/C++的redefinition
在头文件里写下下面两行相同的代码:typedef int X;typedef int X;gcc编译马上就会报redefinition of typedef 'X',换g++居然啥事没有,怪异吧?于是去查文档,发现C++里是这样描述的:“In a given non-class scope, a typedefspecifier can be used to redefine the name of any type declared inthat scope to refer to the type to转载 2010-09-27 10:06:00 · 10416 阅读 · 0 评论 -
#define 定义的数据中包含有UL符号
<br />经常发现一些C语言中通过#define 定义的数据中包含有UL符号,不理解为什么,把他去掉发现也没有什么区别。<br />现在才明白UL是标记该宏长整型 十进制 数据,而不是字符,也不是int型数据。<br />C语言中默认宏中的数字是整型数据。<br />如下面的例子:<br />#define LENGTH (20*1024*1024)UL<br />你要输出他的话就要这样:<br />printf(“LENGTH is %ld/n”,LENGTH);转载 2011-02-12 15:43:00 · 1548 阅读 · 1 评论 -
有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并 (按字母顺序排列), 输出到一个新文件C中
<br />/*有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中.*/#include <stdio.h>#include <stdlib.h>int comp(const void * a, const void *b){ return *(char *)a - *(char *)b;}int main(){ FILE *fp; int i,j,n,ni; char t, ch; char原创 2011-04-12 15:13:00 · 13876 阅读 · 0 评论 -
string.h 中 关于数据拷贝的几个函数测试
<br />//strcpy memcpy strdup bcopy<br /> <br />#include <stdio.h><br />#include <string.h><br /><br />#define DEST_ARRY_LEN 16<br />int my_arry_printf(char * name, char arry [])<br />{<br /> int i;<br /> printf("%s:" ,name);<br原创 2011-04-11 17:29:00 · 672 阅读 · 0 评论 -
一道上级面试题: 接受单词并按字典序排序
<br />#include<stdio.h><br />#include <string.h><br />#include <stdlib.h><br /><br /><br />#define LISTMAXSIZE 64<br />#define STRINGMAXSIZE 1024<br /><br />struct wordList{ //列表结构<br /> char * befor;<br /> char * body;<br />原创 2011-06-02 10:58:00 · 891 阅读 · 0 评论 -
【c】序列化图片资源
#include #include #include long my_file_size(FILE *stream){ long curpos, length; curpos = ftell(stream); fseek(stream, 0L, SEEK_END); length = ftell(stream); fse原创 2011-06-09 18:24:00 · 1008 阅读 · 0 评论 -
void 和 void * 的解释
<br />1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:void a;这行语句编译时会出错,提示“illegal use转载 2011-04-19 16:59:00 · 495 阅读 · 0 评论 -
typedef和define具体的详细区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:#define PI 3.1415926程序中的:area=PI*r*r 会替换为3.1415926*r*r如果你把#define语句中的数字9 写成字母g 预处理也照样带入。2)typedef是在编译时处理的。它转载 2011-06-11 13:26:00 · 427 阅读 · 0 评论