C/C++
zhaoyong8871
擅长C/C++ Qt4 Qt5 QML 嵌入式
展开
-
atoi strcpy memmove strstr 系列函数实现
atoi strcpy memmove strstr 系列函数实现函数原型具体实现:面试的时候可能会被问到实现如下函数,必须流畅的写出来,bug Free~记录一下。函数原型#include <stdlib.h>int atoi(char * digital) #include <string.h>char *strcpy(char *dest, const char *src);void *memmove(void *dest, const void *src,原创 2022-04-24 18:21:16 · 723 阅读 · 0 评论 -
vector push_back()值传递到底啥意思?
The content of val is copied (or moved) to the new element.按照文档上的说明:如果传递的对象,push_back就是对象的副本,push_back后,在改变对象的值,将对vector 的副本对象不起作用。如果传递的是指针,push_back就是指针的副本,push_back后,通过指针改变对象的值,会影响到vector中的指针所指的对象的值。其实也还理解,毕竟vector仅仅保存的是指针的副本,指向的同样的对象。参考代码:#inclu.原创 2021-05-10 21:09:55 · 2694 阅读 · 0 评论 -
QString 转 char * ,const_cast 坑记
这个转换失败:const_cast<char*>(const char * const cp) 不能这么用QString g_strServerIP("90.0.0.1");qDebug()<<g_strServerIP.toStdString().c_str();//return const char * const//不能这么转换char *p = const_cast<char *>(g_strServerIP.toStdString().c_str());原创 2020-11-11 18:05:42 · 250 阅读 · 0 评论 -
二进制兼容的那些事
二进制兼容二进制兼容是针对动态链接库而言的,如果你的源代码已经编译成为可执行文件了,其中你调用了一些动态库,后来你为这个动态库进行了更新,并替换掉原来的动态库了,如果程序在运行时正常运行没有任何问题,那么这个库就是二进制兼容(二进制边界正常)。源代码兼容如果换了库,但是无法运行,需要重新编译修改一些形参传递之类的问题,才能正常运行!二进制不兼容如果换了库,却怎么也无法运行,即使重新编译也无法运行,甚至编译不过,这就叫二进制不兼容(二进制混乱),其原因是因为动态库被经过修改,导致程序无法定位入口点,转载 2020-10-30 09:58:02 · 375 阅读 · 0 评论 -
Qt中为什么很少出现delete,Qt对象又是如何销毁的?
所有集成自QObject类的类,如果在new的时候指定了父亲,那么,在父对象被销毁时,会一级一级清理该父对象管理的所有对象。建议不要自己手动delete QObject对象。而例如直接在main函数中定义的顶级QObject对象,这是所有控件是父容器,因此没有父对象,因此,最好是在代码中设置其属性为: setAttribute(Qt::WA_DeleteOnClose);这样,当该顶级父容器被close的时候,会自动销毁。或者将其定义为非指针类型变量。如果在程序某个功能中new的QObject对象没有父原创 2020-10-27 15:10:53 · 798 阅读 · 0 评论 -
gcc内置宏定义查看命令
g++ -posix -E -dM -< /dev/null原创 2020-08-26 20:59:49 · 418 阅读 · 0 评论 -
Qt QML signal slots
C++的中的信号与槽使用Qt5 的C++ 在头文件中 signal and slots 声明如下:signals: void signal1xxx(); void signal2xxx();slots: void slots1(); void slots2();信号与槽的链接必须使用connect 函数将其关联。QObject::connect(sender,signal,receiver,slot)QML 中的信号与槽在QML文件中,定义与使用如下:import Qt原创 2020-07-29 18:09:03 · 393 阅读 · 0 评论 -
QUdpSocket 编程注意事项
概念:UDP是无连接的用户数据报协议,不能保证数据的全部被对方收到。发送端,接收端数据收发流程:发送端示例代码:QUdpSocket *udpSocket = new QUdpSocket(this);QByteArray datagram = "UDP Datagram message ";udpSocket->writeDatagram(datagram, QHostAddress("169.254.254.11"), 36529);接收端示例代码: void Server::i原创 2020-07-10 11:56:37 · 791 阅读 · 0 评论 -
程序能正常输出 Hello World! 吗?
看到一个有趣的C++程序,加强理解析构函数的作用:程序结束时会自动调用析构函数来删除本身,如果在人为的调用delete this,会造成递归调用,直到程序的栈溢出。因此是看不到我们熟悉的“Hello World!" 滴!顺便把结果页贴出来,程序递归调用了32374次后就栈就崩了。OK,结束!#include <iostream>using namespace std;cl...原创 2020-04-23 21:41:07 · 181 阅读 · 0 评论 -
自定义String 类的实现
自定义String类时,希望输出其内容,于是添加了&amp;amp;lt;&amp;amp;lt;函数,总是出错。原来是没有进行友元声明。总结:输出重载&amp;amp;lt;&amp;amp;lt;操作符;可以使用成员函数,也可是使用友元函数,但函数友元函数使用上方便一些。因此***输入输出运算符一般重载为友元函数***。class String {public: String(const char * str = NULL原创 2019-01-22 22:46:02 · 1204 阅读 · 0 评论 -
实现1个函数,将hex字节流转换为string.例如0xff,0x5a转换为 "ff5a".
题目:实现1个函数,将hex字节流转换为string.例如0xff,0x5a转换为 "ff5a".#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;sstream&gt;using namespace std;string hex2sting(unsigned char *p, int len)原创 2019-01-21 22:34:58 · 730 阅读 · 0 评论 -
QLineEdit setText函数导致程序crash的问题解决
很早在程序代码中有个bug,不明原因的崩溃,分析是程序中的指针引起的,查找了很长的时间,没找到,问题依旧。基于此问题出现的频率很低,就此搁浅。 今天偶然在仿真程序是复现了此问题,还定位了调用堆栈,经过一番努力终于解决此大bug。问题:我的问题与这个基本描述基本相同,参考链接如下:Fast changing QLineEdit crashing the applicationhttps:/...原创 2018-12-13 19:50:08 · 4708 阅读 · 2 评论 -
qt的单例模式-静态成员变量的销毁方法
最近编程学习了一下基础知识,顺便随手记录下,文章涉及的部分内容均已标明出处。文中涉及到了以及知识点:单例模式静态指针的内存释放类中声明子类的声明与实现方法Qt的main函数正确的编写格式(记录此坑).h–接口文件class MainWindow : public QMainWindow{ Q_OBJECT static MainWindow *m_pselfma...原创 2018-11-15 15:52:53 · 2677 阅读 · 0 评论 -
malloc函数 与 new运算符 的区别
1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用...转载 2018-11-13 12:43:19 · 383 阅读 · 0 评论