C语言
关中娃
尽可能使用图和代码---避免大量文字说明---it is my style
展开
-
由localtime引发的函数可重入问题
一、先看一个例子(该例子在visual studio2010中测试)#include#include int _tmain(int argc, _TCHAR* argv[]){ time_t now; struct tm *tmStart, *tmEnd; if(time(&now)==-1)//函数time返回月历值(格式 struct tm)。若参数是0,函数返回该值,否则将转原创 2013-08-21 22:17:05 · 2953 阅读 · 0 评论 -
大小端的问题的话语场景:代码移植和网络通信
只知道大小端是什么意思,而不知道大小端的应用场景,显然对这个东东是不可能有深刻理解的。(1)为什么出现这个东西?答:在各种计算机体系结构中,对于字节、字等的存储机制有所不同。(2)何谓大端,何谓小端?答:这个有点绕。简单的:if(0x12345678 & 0xFF == 0x12) Byte Endian,即高位的数据放在低位的地址处。小端反之(3)不同计算机体原创 2013-09-17 16:36:06 · 1651 阅读 · 0 评论 -
C字符串方面的问题
第一题:母串里面查找子串(1)递归方法#include int strstr_count(const char *s, const char *child){ char *p = strstr(s, child); return p ? 1 + strstr_count(p+1, child) : 0;}(2)模板匹配方法#inclu原创 2013-11-08 19:11:43 · 746 阅读 · 0 评论 -
关于“递归”的探讨
1、快速判断一个整数是否是2的整数幂次方,并判断出来是多少次方 算法设计:整数的移位和除以2在效果上相同。例如8/2=4,8>>1 = 4;3不是整数次幂,返回-1//命名为mylog2,math.h头文件中包含log2这个函数#include int mylog2(int value){ if((value & 0x01) == 1)//当不是整数次幂的时候直接退出原创 2013-12-07 10:56:06 · 610 阅读 · 0 评论 -
查表法的应用举例
第一题、请问怎样将随机输入的字符串,统计里面每个字符所出现的次数??算法设计:关于这方面的后续做整理!原创 2013-11-08 12:20:26 · 1792 阅读 · 0 评论 -
ucosII信号量---实现较快数据采集与较慢数据处理的同步
Ucos使用新号量实现两个任务的同步例子:任务A、B,任务B需要在屏幕上打印任务A得到的数据包。解决的问题:任务A速度快,任务B速度慢。也就是B对于A来说有丢包。设计思想:新建一个缓冲区copy任务A的数据包,copy的时机是B显示完成;任务B显示的时机是任务B拷贝完成。代码如下:OS_EVENT *startDrawFigure = NULL; //开始画频谱线OS_原创 2014-04-02 19:55:16 · 1670 阅读 · 0 评论 -
文本编辑、控制台交互(对* #做处理)
通过这个试验可以练习一下用户和控制台交互的过程。这是华为的一道机试题:输入一段字符,碰到‘*’舍弃,遇到‘#’取消本次输入。例子:若输入:How are** you!输出:How are you!不能使用文件操作函数,不能包含.h头文件。不能加预编译指令。(1)下面是使用scanf 、string 、sprintf三个函数来实现。// 文本编辑.cpp : Defi原创 2014-04-02 20:29:55 · 667 阅读 · 0 评论 -
指针数组和二重指针的等价使用
#include "stdio.h"int main(){ char *p[] = {"aaa","bbb"}; char **pp = p; printf("%s",p[0]); //输出结果是:aaa printf("%s",pp[0]);//输出结果是:aaa return 0;}原创 2014-05-08 23:40:43 · 2432 阅读 · 0 评论 -
STM32定时器实现100毫秒保存一次数据到SD卡
假设使用定时器3每1毫秒定时;保存至SD卡的函数是StartSave();第一种情况:定时器快,主循环慢1、代码设计1(错误的设计)int cnt = 0; //计数//TIM3中断处理函数void TIM3_IRQHandler(void){ if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) {原创 2015-02-10 10:20:28 · 5966 阅读 · 2 评论 -
C/C++笔试面试常见题目2
第一、转int到str//使用函数sprintf将整形数字格式化 char* int2str(int nSrc,char*sDest) { if(sDest == NULL) return NULL; char nSrc_arry[64] = {0}; sprintf(nSrc_arry,"%d",nSrc); memcpy(sDest,nSrc_arry,s原创 2013-11-01 16:27:09 · 1231 阅读 · 0 评论 -
C/C++编译或链接,错误汇总
(1)环境:eclipse c语言;错误现象: 找不到库文件里的函数,编译时无错误,即灭有提示找不到库,链接时提示找不到该函数。原因:库之间有依赖性,有先次序之分。(2)环境:eclipse c语言;错误现象:编译时报出implicit declaration错误原因:头文件中声明的函数和定义的函数不一致。确认后逐步整理吧!原创 2013-09-19 08:17:33 · 1205 阅读 · 0 评论 -
使用char **ptr实现一个动态二维数组
使用char **ptr实现一个动态二维数组,方便使用:class Matrix {protected:int lines,columns; char** ptr; public:Matrix(int li,int col): lines(li),columns(col){int i,j;ptr=new char*[lines];原创 2013-08-15 17:34:14 · 1394 阅读 · 0 评论 -
memcpy和sprintf的区别
应用场景:如果对于协议传输数据,memcpy比较好,因为可以严格控制存入数据的位置。但是对于向一块内存连续的存入数据sprintf是比较好的选择。一、memset函数原型void *memset(void *s, char ch, size_t n);函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。memset:原创 2013-09-14 10:57:21 · 2572 阅读 · 0 评论 -
异步回调过程分析(客户端:cURL获取网页源码)
一、说明(1)为了代码简洁,便于表述,采用C++编译环境(2)本代码需要curl库的支持,可以通过http://curl.haxx.se/下载二、代码实现的功能主程序通过调用cURl库函数获取网页源码,但是对于源码的处理逻辑,交由客户端处理,即函数getWebSource。三、代码示例#include "curl\curl.h"#include#includestd:原创 2013-08-25 09:54:29 · 1860 阅读 · 0 评论 -
const char*、char*及字符串常量的正确使用
const char*和char*的转换是老生常谈了,但是很少有人把它们和字符串常量一起分析,本人觉得这是搞清楚他们的一个关键。下面是一个简单的测试程序:编译环境:windows、vs2010#includeint main(void){ //(1)char *到const char*的转换 char *str = (char*)malloc(sizeof("hello!原创 2013-08-23 19:00:44 · 9248 阅读 · 0 评论 -
URL的解析,C语言实现
这个可以应用于自己封装数据头的情况,比如基于socket来实现http协议等。URL的格式:(协议)://(主机名):(端口号) / (文件路径)/(文件名) 例如:http://zj.qq.com/a/20130824/002507.htm#p=8编译环境:windows ,visual studio2010以下是代码: #include //printf原创 2013-08-24 20:17:13 · 8801 阅读 · 0 评论 -
二重指针、指针引用的效果分析
编译环境:Visual Studio2010 一、代码分析这是做了一个分别使用二重指针和指针的引用带回函数处理结果的例子,左边图使用二重指针,右边图使用指针引用。可以看出来就这个问题来说,使用指针引用简单。但是对于纯C语言的代码,没有引用的概念,就不可用了。二、调试结果下面的结果是调试到上左图黄色箭头处,各变量的值。明显&rst1和dest的值相等,用通俗的话说是dest保原创 2013-08-30 22:15:35 · 955 阅读 · 0 评论 -
http digest认证过程分析及例子
验证过程: 步骤一、客户端向服务器申请数据 ****************************Request******************************GET /auth HTTP/1.1(\r\n)Accept: */*(\r\n)Host: 192.168.1.15(\r\n)Co原创 2013-09-14 11:34:33 · 3827 阅读 · 0 评论 -
-0在计算机中的存储是什么呢
依据:(1)在计算机系统中,数值一律用补码来表示(存储).(2)正数的补码与原码相同。(3)负数的补码等于其绝对值的原码各位取反,然后整个数加1的数值。依据以上三条可断定:-0在内存中的存储可以这样计算:-0是负数,依据(3),其绝对值0各位取反为0xff ff ff ff(假设机器是32位),然后加1,得到0。所有-0在内存中存储是0x00000000。这个确实特原创 2013-10-16 10:13:01 · 3286 阅读 · 0 评论 -
STM32串口中断接收一个完整的数据帧
代码运行条件:(1) 大端发送;(2) 上位机发送一帧数据的时间间隔不能大于主循环周期;(3)数据帧满足下面格式: 帧头部(Head)类型(Type)长度(Length)值(Value)CRC校验2字节1字节1字节X字节2字节原创 2015-02-10 12:56:05 · 22304 阅读 · 7 评论