char函数

基于51单片机的CAN通讯协议C语言程序

♀尐吖头ヾ 提交于 2020-03-22 09:39:21
//-----------------------函数声明,变量定义-------------------------------------------------------- #include <reg52.h> sbit int0 = P3^2; //-----------------------定义寻址的基址-------------------------------------------------------- #define base_Adr 0x00 //-----------------------定义总线定时寄存器的值-------------------------------------------------------- #define SJA_BTR0 0x00 //该值需要用户根据实际需要的波特率进行计算 #define SJA_BTR1 0x16 //具体计算见文章说明 //-----------------------设置接收报文类型(标示符)-------------------------------------------------------- //该值需要用户根据实际需要重新配置 #define SJA_ACR 0x00 //验收代码寄存器的值 #define SJA_AMR 0x16 //验收屏蔽寄存器的值 //-------

C-C++一些细节

与世无争的帅哥 提交于 2020-03-22 00:32:46
C++内存解析 一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。 二、三者之间的区别我们通过代码段来看看对这样的三部分内存需要怎样的操作和不同,以及应该注意怎样的地方。 例一:静态存储区与栈区 char* p = “Hello World1”; char a[] = “Hello World2”; p[2] = ‘A’; a[2] = ‘A’; char* p1 = “Hello World1”; 这个程序是有错误的,错误发生在p[2] = ‘A’这行代码处,为什么呢? 是变量p和变量数组a都存在于栈区的

i2c总线编码

ぐ巨炮叔叔 提交于 2020-03-21 10:49:31
发送启动信号S 在同步时钟线SCL 为高电平时,数据线出现的由高到低的下降沿。 启动信号子程序STA 1 /******************************************************************************* 2 * 函数名 : I2cStart() 3 * 函数功能 : 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿 4 * 输入 : 无 5 * 输出 : 无 6 * 备注 : 起始之后SDA和SCL都为0 7 *******************************************************************************/ 8 9 void I2cStart() 10 { 11 SDA=1; 12 Delay10us(); 13 SCL=1; 14 Delay10us();//建立时间是SDA保持时间>4.7us 15 SDA=0; 16 Delay10us();//保持时间是>4us 17 SCL=0; 18 Delay10us(); 19 } 发送停止信号P 在SCL 为高电平期间SDA 发生正跳变。 停止信号子程序STOP 1 /***************************************************************

strtok和strtok_r

我们两清 提交于 2020-03-21 08:59:18
strtok和strtok_r 原型:char *strtok(char *s, char *delim); 功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。 strtok在s中查找包括在delim中的字符并用NULL('/0')来替换,直到找遍整个字符串。 返回值 :从s开头開始的一个个被切割的串。当没有被切割的串时则返回NULL。 全部delim中包括的字符都会被滤掉,并将被滤掉的地方设 为一处切割的节点。 举例: #include < string .h > #include < stdio.h > int main( void ) { char input[ 16 ] = " abc,d " ; char * p; /* strtok places a NULL terminator in front of the token, if found */ p = strtok(input, " , " ); if (p) printf( " %s " , p); /* A second call to strtok using a NULL as the first parameter returns a pointer to the character following

学习vc++的第三天--集合

£可爱£侵袭症+ 提交于 2020-03-21 01:10:58
原来cpp拷贝构造函数写了之后一定要重写赋值运算符,否则会出现内存重复释放的问题. 学习了集合类型,发现cpp的vector的_Pop_back_n()函数已经在vs2019无法使用..貌似作用也不大..嘻嘻 cpp的vector和c#的list差不多,而cpp的list却好像没有对应的c#操作... 因为我在c#上面重写过迭代器支持类型, 也就是一个不重复加入的:list<T1,T2,T3>, c#自带的支持重复和仅一个泛型的模板:list<T>, 所以可能会在cpp上面复现过往实现过的功能,就比较敏感集合类型的用途. vector的意思是矢量,矢量是连续的, 而list是链表,链表是可断可接, 如意所示,速度要求就看名字就可以联想得到,给他们起名字的人都挺有意思的. 然后发现cpp的std(标准模板库)的没有驼峰命名法,蛮糟糕的,因为敲开c#的人都喜欢以此区分函数和变量... cpp挺有意思,int不能写成int,要写成size_t...因为考虑了64位版本... 所以很多时候一定要多看内部代码.. 今天学习到字符串的赋值和操作,主要操作的形式是要对char.. char*.. const char*.. 然后和string..str.c_str()的认识... 乱七八糟的学习代码: #include <iostream> #include <vector> #include

常见c语言字符串题

丶灬走出姿态 提交于 2020-03-20 18:38:37
字符串是程序员求职笔试中必考题型,很能考查出编程的基础。下文选取了几个常见的考题和大家进行分享。 1、编写函数,实现把一个char组成的字符串循环右移n位。如abcdehi,n=2。则输出hiabcde。 #include "iostream" using namespace std; const int MAX_LEN = 20; void LoopMove(char* cpStr, int iSteps) { //注意,在整个处理过程中,cpStr的最后字符都没有涉及处理 char cTempArray[MAX_LEN]; size_t szStrLength = strlen(cpStr); size_t in = szStrLength -iSteps; memcpy(cTempArray, cpStr + in, iSteps); memcpy(cTempArray + iSteps, cpStr, in); memcpy(cpStr, cTempArray, szStrLength); cTempArray[szStrLength + 1] = '\0'; cout << cTempArray << endl; } int main() { char ctemp[] = "abcdefghi"; LoopMove(ctemp, 2); cout << ctemp <<

简单的多屏播放器示例(vlc+qt)

强颜欢笑 提交于 2020-03-20 07:26:30
介绍 简单的多屏播放器 最多同时播放16个视频 支持本地文件和rtsp、rtmp等流媒体播放 VS2015工程,依赖Qt+VLC 练手作品 截图 下载 程序: download.csdn.net/detail/u014755412/9908787 源码: github.com/FutaAlice/QtPlayer 代码分析 IMediaPlayer是为规定接口的基类 提供了播放和控制的几个常用函数 其中打开媒体部分拆分为了OpenURL和OpenFile,并在cpp中实现 若为Windows环境,则对QFileDialog获取的路径进行替换 /******************************************************************* IMediaPlayer.h(接口类) 构造时传入QWidget* 调用OpenFile或OpenURL或Open打开文件并渲染窗体 *******************************************************************/ #ifndef IMEDIAPLAYER_H #define IMEDIAPLAYER_H class QWidget; class IMediaPlayer { public: IMediaPlayer(QWidget* pWidget);

指针函数/函数指针/指针数组/数组指针 区别

∥☆過路亽.° 提交于 2020-03-20 04:32:30
今天又遇到了指针数组,理解通道数据搞了半天。。。 bool LocalFileSaver::SaveADCData(Cash *data, LPCTSTR folder) { if (_tcscmp(folder, _T("")) == 0) { return false; } TCHAR path[MAX_PATH] = { 0 }; TCHAR fileName[128] = { 0 }; char sn[24] = { 0 }; strcpy(sn, data->GetSN()); if (sn[0] == '\0') { sprintf(sn, "0"); } wsprintf(fileName, _T("%04d%02d%02d_%02d%02d%02d_%03d_Err%03d_LastErr0x0_Den%d_Dir%d_Ver%02d_SN%s_adc.raw"), runCashStartTime.wYear, runCashStartTime.wMonth, runCashStartTime.wDay, runCashStartTime.wHour, runCashStartTime.wMinute, runCashStartTime.wSecond, data->Id(), data->GetError(), data->GetDenomination(),

转:gcc编译C++程序

≯℡__Kan透↙ 提交于 2020-03-19 09:53:41
转:http://blog.csdn.net/liujiayu2/article/details/49864381 单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: [cpp] view plain copy print ? /* helloworld.cpp */ #include <iostream> int main( int argc, char *argv[]) { std::cout << "hello, world" << std::endl; return(0); } 程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件: $ g++ helloworld.cpp 编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行: $ ./a.out hello, world 更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件

Oracle基础函数

假装没事ソ 提交于 2020-03-19 05:55:09
[sql] view plain copy --1,大小写控制函数 SELECT LOWER( 'Hello World') 转小写, UPPER( 'Hello World') 转大写, INITCAP( 'hello world') 首字母大写 FROM DUAL; --2,字符控制函数 SELECT CONCAT( 'Hello', 'World') 字符连接 FROM DUAL; --3,求字母串中的某个子串 SELECT SUBSTR( 'Hello World',3) FROM DUAL; --截取从第3个字符到末尾 SELECT SUBSTR( 'Hello World',3,4) FROM DUAL; --截取从第3个字符连续4个字符 --4,字符数和字节数 SELECT LENGTH( 'China') 字符数, LENGTHB( 'China') 字节数 FROM DUAL; --5,在母串中,查找子串的位置 SELECT INSTR( 'Hello World', 'll') FROM DUAL; --6,左右填充,将abcd用*填充到10位 SELECT LPAD( 'abcd',10, '*') 左填充, RPAD( 'abcd',10, '*') 右填充 FROM DUAL; --7,去掉字符串前后指定的字符 SELECT TRIM( 'H' FROM