![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C&C++
大捞子
光优秀还不够,你必须无可取代!
stay hungry,stay foolish.
展开
-
谈谈我对Linux下“生产者/消费者线程模型”的理解
生产者消费者线程模型常常用于网络编程,即一个线程监听事件发生(生产者,例如产生“收到数据”事件),其他线程来处理事件(消费者,例如处理收到的数据)比较笨的办法是: 消费者线程不停地loop等待数据,当生产者线程发现收到数据时,找一个线程(先不讨论找线程的策略),把“收到数据”这一事件告诉消费者线程。消费者线程会在下一个loop对这个事件进行处理,处理完毕后,继续loop,直到下一个事件到来。但这么...转载 2018-03-06 21:06:19 · 344 阅读 · 1 评论 -
c++中的运算符优先级
C++ 中的运算符优先级运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。例如 x = 7 + 3 2,在这里,x 被赋值为 13,而不是 20,因为运算符 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。下表将按运算符优先级从高到低列出各个运算符,具有较原创 2017-09-12 20:20:57 · 1718 阅读 · 0 评论 -
linux之#if 0 ... #endif用途
在过去都没有去理会#if 的作用,今天突发奇想,开启编译器试一试。很多人都知道,#if 0 ... #endfif的作用跟/*...*/的作用是一样的,就是注释,可是注释为什么不用注释符号/*就行了么?google了一下,大家都说是为了解决嵌套注释。如:/*---------------------------------------------------------------原创 2017-09-09 14:57:54 · 1396 阅读 · 0 评论 -
c++中的string常用函数用法总结
标准c++中string类函数介绍注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据原创 2017-09-13 20:19:09 · 506 阅读 · 1 评论 -
Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
一、gets() 函数详解gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串。调用格式为:gets(str);其中str为字符串变量(字符串数组名或字符串指针)。gets(str) 函数与 scanf("%s", &str) 相似,但不完全相同,使用 scanf("%s", &str) 函数输入原创 2017-08-09 22:04:10 · 10782 阅读 · 0 评论 -
【转】C/C++中static关键字作用总结
1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。//a.cchar a = 'A'; // global variablevoid msg(){原创 2017-08-03 19:24:02 · 275 阅读 · 0 评论 -
C结构体、C++结构体 和 C++类的区别
C结构体、C++结构体基本相同,C++类主要是方法的实现。结构体是数据类型的集合类是数据类型加方法的集合,基本如此,更注重方法。1.C的结构体和C++结构体的区别(1) C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。(2)C的结构体对内部成员变量的访问权限只能是public,而原创 2017-08-05 15:10:37 · 612 阅读 · 2 评论 -
字符串与字符数组的区别
用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。2.对字符串指针方式,char *ps=”C Language”;可以写成char *p原创 2017-08-05 16:01:54 · 1292 阅读 · 1 评论 -
C语言之数据输出printf( )和putchar( )
格式化输出函数printf( )printf( )功能:向系统指定输出设备按指定的格式输入任意个任意类型的数据,并返回实际输出的字符数。若出错,将返回负数。printf( )使用形式:printf("格式控制字符串",输出项列表);格式字符(以"%"引导):(1)d格式字符:用来输出十进制整数。%d,按整型数据的实际长度输出。%md,m为指定原创 2017-08-05 20:20:17 · 8725 阅读 · 0 评论 -
MFC串口编程——使用WM_COMM_TXEMPTY_DETECTED来判断接收结束
最重要的写在最前面:::SendMessage((port->m_pOwner)->m_hWnd, WM_COMM_TXEMPTY_DETECTED, (WPARAM) RXBuff, (LPARAM) port->m_nPortNr); 在void CSerialPort::ReceiveChar(CSerialPort* port, COMSTAT comstat)函数原创 2017-10-30 22:19:43 · 1857 阅读 · 0 评论 -
MFC下自动识别串口的实现
摘自:http://blog.csdn.net/itas109/article/details/18359295程序:http://blog.csdn.net/itas109/article/details/18359295serial类里边的两个函数[cpp] view plain copyvoid CSerialPort:原创 2017-10-23 13:47:12 · 3354 阅读 · 0 评论 -
使用static与const关键字时需要掌握的知识
static:1、不考虑类,static的作用: 1)第一个作用:隐藏。使得全局变量和函数对其它文件不可见,同时避免了不同文件的命名冲突。 2)第二个作用:默认初始化为0。未初始化的全局静态变量和局部静态变量都保存在BBS段,BBS段的特点是,程序运行之前会自动清零。 3)第三个作用:保持局部变量内容的持久性。此变量声明周期是整个程序的声明周期,但是作用域只在声明原创 2018-01-11 16:52:40 · 290 阅读 · 0 评论 -
strcpy、strncpy与memcpy的区别与使用方法
strcpy、strncpy、memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到,但是三个函数的区别、使用时该注意什么还是有必要说下的。本文参考《C 标准库》编写。一、函数说明1、memcpy函数void *memcpy(void *s1, const void *s2, size_t n);说明:函数memcpy从s2指向的对原创 2018-01-11 16:26:18 · 904 阅读 · 0 评论 -
C语言里用结构体和指针函数实现面向对象思想
转自:http://www.linuxidc.com/Linux/2016-12/138789.htm一、基础研究观察如下两个程序a.c和b.c:A.c: B.c: 这两个程序都是要实现在屏幕上第10行40列打印一个绿色的字符c: 这两个程序的数据组织方式是一样的,都是使用结构体,而且对共性和个性的分离的思路也是一样原创 2018-01-11 14:26:56 · 2374 阅读 · 0 评论 -
c++中vector的用法详解
转自:http://blog.csdn.net/hancunai0017/article/details/7032383vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含:转载 2017-11-24 20:35:53 · 588 阅读 · 0 评论 -
深入C语言把文件读入字符串
1.纯C实现FILE *fp; if ((fp = fopen("example.txt", "rb")) == NULL) { exit(0); } fseek(fp, 0, SEEK_END); int fileLen = ftell(fp); char *tmp = (char *) malloc(sizeof(char) * fileLen); fseek(fp, 0, S原创 2017-10-26 19:39:42 · 8356 阅读 · 0 评论 -
C++中this指针的用法详解
转自:http://blog.chinaunix.net/uid-21411227-id-1826942.html1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上thi原创 2017-11-17 15:22:56 · 980 阅读 · 1 评论 -
MODBUS通讯协议及编程【一】
一、Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应转载 2017-10-25 23:04:13 · 2337 阅读 · 0 评论 -
解决CserialPort类串口程序中WriteToPort只能发送一次问题
现象:每次打开串口只能发送一次,需要关闭再打开或者接收完数据才能发送成因:在自带串口的电脑、或用优质的USB串口线都没有出现改问题,很有可能跟串口线的质量有关, 调试发现在调用玩WriteToPort函数 SetEvent(m_hWriteEvent);后第一次能够正常进入监视线程(CommThread(LPVOID pParam)) 调用WriteChar(port),然原创 2017-11-09 20:11:04 · 2911 阅读 · 1 评论 -
C语言数据输入scanf( )和getchar( )
格式化输入函数scanf( )scanf( )功能:按照指定的格式读入键盘上输入的若干个任意类型的数据,存入到argument参数所指向的内存单元,函数返回值为读入并赋给argument的数据个数,出错则返回0。scanf( )使用形式:scanf("格式字符串",输入项首地址列表);scanf( )函数执行时将输入的数据流按指定格式转换为数据,存入相应的存储单原创 2017-08-05 20:22:37 · 1937 阅读 · 1 评论 -
int argc 、char *argv[] 与 char **argv
char *argv[] 与 char **argv#include#includestring.h>int main(int argc,char *argv[])//同int main(int argc,char **argv){ char *str_test = "hello wang"; int i,j,len; for(i=0;i) { pri原创 2017-08-07 18:50:53 · 1006 阅读 · 0 评论 -
char *s 和 char s[] 的区别小结
最近的项目中有不少c的程序,在与项目新成员的交流中发现,普遍对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误。一时也不能说得很明白,网上也搜了一下相关文章发现一些写的比较好的,综合了一下当教育资料备用。 char *s1 = "hello";char s2[] = "hello"; 【区别所在】cha转载 2017-07-21 18:51:47 · 306 阅读 · 0 评论 -
笔试题4. LeetCode OJ (4) Fizz Buzz
题目的意思是如果给定一个数n,如果能被3整除,就输出字符“Fizz”,如果能被5整除,就输出字符“Buzz”,如果同时能被3和5整除,就输出字符“FizzBuzz”,其他情况正常情况输出字符“i”。class Solution {public: vector<string> fizzBuzz(int n) { vector<string> vect_ret(n); for(原创 2017-01-12 10:37:44 · 525 阅读 · 1 评论 -
笔试题1. LeetCode OJ (1) Hamming Distance
题目意思是:求两个整数之间的汉明距离是对应位不同的位置的个数。class Solution {public: int hammingDistance(int x, int y) { if(x==y) return 0; int count=0; while(x || y){//排除x,y都是0的情况 if((x&1)!原创 2017-01-10 09:30:08 · 512 阅读 · 3 评论 -
笔试题2. LeetCode OJ (2) Battleships in a Board
题目意思是:在一个给定的板上,“.”表示空白,“X”表示船,船可以是 1xN (1 row, N columns) or Nx1 (N rows, 1 column),但是两个船之间必须有间隔,否则是无效的,计算出船只数。int countBattleships(vector<vector<char>>& board) { if (board.empty() || board[0]原创 2017-01-10 21:19:49 · 568 阅读 · 2 评论 -
笔试题3. LeetCode OJ (3) Counting Bits
题目的意思是:给定一个非负整数i,在范围0≤i≤num数中计算二进制表示的1的数量,并把他们作为一个数组返回。class Solution {public: vector<int> countBits(int num) { vector<int> ret(num+1,0); int cnt=0; int j=1; int te原创 2017-01-11 09:47:08 · 317 阅读 · 0 评论 -
C++ vector用法的详解
转自https://zhidao.baidu.com/question/360672934.htmlvector容器类型 vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。vector的构造 函数原型:template explicit vector();原创 2017-01-11 09:12:28 · 305 阅读 · 0 评论 -
笔试题9. LeetCode OJ (9) Arithmetic Slices
题目的意思是:给你一串数字(至少3个),其中的一串数字(子串——3个或者3个以上数字组成)相邻两个数字之间的差两两相等,那么这串数字就是“Arithmetic Slices”——“算数片”,请计算一串数字中的“算数片”。class Solution {public: int numberOfArithmeticSlices(vector<int>& A) { int len原创 2017-01-14 18:50:07 · 363 阅读 · 0 评论 -
笔试题8. LeetCode OJ (8) Nim Game
题目的意思是:有一堆石子,两个人拿石子,每次只能拿1~3块石子,谁先拿到最最后一个就赢了,计算谁能赢。每次都是你先手,假如有4块石子,那么无论如何都是你输。class Solution {public: bool canWinNim(int n) { if(n%4==0) return false; else原创 2017-01-14 16:36:44 · 392 阅读 · 0 评论 -
switch case语句中的default语句
default语句不是必须的。 switch case 语句是一个条件选择语句,找到相同的case值做为入口,执行后面的程序;若所有的case都不满足,则找default入口;若未找到则退出整个switch语句。 所以default只是一个备用的入口,有没有都无所谓。原创 2016-12-01 22:14:04 · 9011 阅读 · 0 评论 -
笔试题5. LeetCode OJ (5) Reverse String
题目意思是:讲一个字符串倒序过来。class Solution {public: string reverseString(string s) { char c; int t=0; int r=s.size()-1; while(t<r){ c=s[t]; s[t]=s[r];原创 2017-01-12 11:02:19 · 285 阅读 · 0 评论 -
笔试题6. LeetCode OJ (6) Island Perimeter
题目的意思是:网格中间“0”代表的是水,“1”代表的是岛屿,岛屿是相连的,并且岛屿里面不会有湖,就是不会有“岛中湖”。计算出整个岛屿的周长。class Solution {public: int islandPerimeter(vector<vector<int>>& grid) { int count=0; int repeat=0; fo原创 2017-01-12 22:29:45 · 420 阅读 · 0 评论 -
笔试题13. LeetCode OJ (13) Array Partition I
Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), …, (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large as possibl原创 2017-05-08 10:15:36 · 371 阅读 · 0 评论 -
笔试题12. LeetCode OJ (12) Encode and Decode TinyURL
TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/design-tinyurl and it returns a short URL such as http://tinyurl.com/4e9iAk.Design the encode and decode原创 2017-05-06 21:20:40 · 536 阅读 · 0 评论 -
中国开源项目哪家强?看看阿里,百度,腾讯,360等都开...
开源github地址:https://github.com/Qihoo3601.MySQL中间层 AtlasAtlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多My转载 2017-05-03 22:36:12 · 2635 阅读 · 0 评论 -
回调函数和发消息的作用比较
一回调函数我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢?使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而 那个函数在需要的时候,利用传递转载 2017-05-03 22:33:07 · 2241 阅读 · 0 评论 -
VS2010/MFC 配置Halcon12 并显示图片
工具/原料 · win7 x64 · Visual Studio 2010 · Halcon12第一步(halcon部分)先在halcon中新建一个读入图片的程序程序,并导出C++代码到桌面,命名为“halcon.c”,halcon部分操作就此结束,下面是vs2010部分操作。第二步(vs2010部分,新建MFC界面程序)新建项目 菜单,文件 -原创 2017-04-10 22:33:36 · 4759 阅读 · 2 评论 -
笔试题11. LeetCode OJ (11) Keyboard Row
Given a List of words, return the words that can be typed using letters of alphabet on only one row’s of American keyboard like the image below. Example 1: Input: [“Hello”, “Alaska”, “Dad”, “Peace”]原创 2017-02-22 14:23:58 · 510 阅读 · 0 评论 -
笔试题10. LeetCode OJ (10) Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.Note: The given integer is guaranteed to fit within the range of a 32-b原创 2017-02-21 09:16:17 · 363 阅读 · 0 评论 -
笔试题7. LeetCode OJ (7) Find All Numbers Disappeared in an Array
题目的意思是:给定一个数组, 1 ≤ a[i] ≤ n,n是数组的长度,在1~n中找到数组中没有出现过的数字。你能做到这一点没有额外的空间和O(N)运行时?您可以假定返回的列表不算作额外空间。class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int>原创 2017-01-13 10:02:49 · 302 阅读 · 0 评论