C语言基础备忘录 3、在用 gets() 函数读取字符串的时候,有一些编译器会提示不安全,建议替换为 gets_s() 函数,就是因为 gets() 不能控制读取到的字符串的长度,风险极高。1、C语言的缓冲区会带来一些负面影响。2、scanf的高级用法。
Three.js Babylon.js 前端3D引擎区别 Babylon.js 特点:强大的编辑器、强大的节点编辑器、NATIVE 跨平台原生应用部署、支持先进的WEBXR技术。如果你项目必须是webgl的,需要浏览器打开,webgl技术风云录中提到的那些平台都无法满足你的需求,建议用Babylonjs,这是最好的平台,最好的框架。Three.js 特点:如果是webgl开发者,目前毫无头绪,请使用threejs,它是万金油...
Ubuntu Docker 和 docker-compose安装 一、Ubuntu Docker1.首先确认Ubuntu已安装CURL若未安装可参考Ubuntu 安装 CURL 过程https://blog.csdn.net/Hilaph/article/details/124271427?spm=1001.2014.3001.55012.使用官方安装脚本自动安装安装命令如下:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun也可以使用国内 daocloud 一键安
VM 安装 Ubuntu 出现 blk update request i/o error 或 rc local installing open vm tools 的错误解决办法 在vmware workstation中安装Ubuntu系统过程中卡在载入界面右键虚拟机编辑设置,看到多了软盘文件autoinst.iso文件,虚拟机安装系统默认自动安装,会在安装系统目录文件中生成**autoinst.iso和autoinst.flp文件引导整个系统自动安装。解决方式,安装前创建好虚拟机后不要选择创建后开启虚拟机那个选项,然后进入安装文件夹下把这这两个文件删了。再次进入虚拟机开启系统就可以了。参考文献:https://blog.csdn.net/weixin_410887..
SIP 注册流程 代码实现 sip协议的通信是在应用层,传输层依靠UDP进行传输。注册流程简单来说就是:客户端发送register请求,服务器通过鉴权判断客户端号码是否存在,如果需要密码就回复401 Unauthorized,如果不需要密码就直接回复200 OK,客户端收到鉴权要求后根据401 Unauthorized携带的编号以及加密协议(例如MD5)将密码添加进去,重新发送register,服务器判断正确后回复200 OK,注册成功。代码层面上则是:以C# 使用LumiSoft.Net.SIP 组件为例1、先UDP
SIP协议 基本流程 及 抓包数据 1、SIP业务基本知识1.1 业务介绍会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、管理和终止网络中的语音和视频会话,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话。SIP的业务模式是一个点对点协议,其中有两个要素——SIP用户代理和SIP网络服务器。用户代理是呼叫的终端系统元素,而SIP服务器是处理与多个呼叫相关联信令的网络设备。用户代理本身具有一客户机元素(用户代理客户机UAC)和一服务器元素(用户代理服务器UAS)。客户机元素初始呼叫
Visual Studio 生成库、exe文件时 关于 依赖库 和 动态链接与静态链接 生成方式 DLL首先在创建工程后,会出现一个问题,是Debug还是Release,是X86还是X64,X86 和 X64的选择要和调用方所使用的位数相关,否则会出现 “试图加载格式不正确的程序”的问题。在工程的属性中,C/C++ -->运行库 总共有四种:多线程调试(/MTd)、多线程调试DLL(/MDd)、多线程(/MT)、多线程DLL(/MD)调试模式下运行库带d,但发布模式不带。调试与发布的区别在于,发布模式省略了程序的调试信息,简单来说就是删除了调试模式下的用于调试的内容,所以一般情况.
慎用 strncpy !memcpy strcpy strncpy比较 一、函数说明1、memcpy函数void*memcpy(void *s1, const void *s2, size_t n);说明:函数memcpy从s2指向的对象中复制n个字符到s1指向的对象中。如果复制发生在两个重叠的对象中,则这种行为未定义。返回值:函数memcpy返回s1的值。2、strcpy函数char*strcpy(char *s2, const char *s1);说明:函数strcpy把s1指向的串(包括空字符)复制到s2指向的数组中。...
C 实现 授权 设定授权时间限制 AES算法 一、软件授权的思路主要分为以下步骤1、获得被授权计算机的唯一标识,例如CPU编码、硬盘编码、MAC地址等。2、将标志内容编码为不可被识别的加密数值——注册码。3、授权方将注册码解码。4、在注册码中添加时间限制以及其它携带信息并编码为不可被识别的加密数值——序列号。5、被授权电脑上获得序列号后,将其解码判断标志内容和日期是否符合,并将序列号保存以备以后启动时判断。二、这个步骤中有几个知识点:1、获取唯一标识;2、编码算法;3、将时间等信息添加入注册码中。1和3的解决办法有很多,而2
C# JAVA 调用 外部DLL库 函数接口 需要使用 回调函数传参时 异常 的解决办法 我所遇到的情况是C#和JAVA在调用我用C写的DLL库中的含有以回调函数作为参数的函数接口时会以外终止报错。最后在网上查找资料发现是因为在生成DLL时缺少了对接口的必要声明。正常的DLL接口函数的声明是在函数前加入__declspec(dllexport)来表明这是对外的接口函数。而当函数中要传递回调函数时,也要对回调函数做贴别的声明_stdcall,如以下示例:typedef int(_stdcall *pfun)(unsigned char*);pfun callFunc;__declsp
Windows UDP recvfrom 不能阻塞 及 bind 报错的解决办法 1、正常来说,UDP的recvfrom默认是阻塞的。可以手动设置是否为阻塞u_long iMODE = 0;//1为非阻塞,0为阻塞ioctlsocket(udp_cliSocket, FIONBIO, &iMODE);//设置recvfrom是否为阻塞ioctlsocket的第一个参数为socket套接字。此处我设置为0,依然会不阻塞。2、如果bind失败了,也会导致recvfrom不阻塞。if (bind(udp_cliSocket, (SOCKADDR*)&
随意编辑网页内容的简单方法 只需要一行document.body.contentEditable='true';以谷歌浏览器为例:1、打开一个网页2、按F123、选择console在最下面的空行输入document.body.contentEditable='true';并回车4、然后就可以随意对内容进行编辑了...
windows C 调用音频输出设备 实现播放 在之前有写过一篇 使用C来调用音频输入设备录音:https://mp.csdn.net/console/editor/html/105217385本次将在调用输入设备的基础上再调用输出设备将录音内容播放出来:主要用到的函数:waveOutGetNumDevs:返回系统中的输出设备数量(可以不用)waveOutGetDevCaps:检查指定输出设备特性(可以不用)waveOutOpen:打开默认的wave设备waveOutPrepareHeader:准备一个波形数据块用于播放wav
Windows 文件名在 Linux 下显示为乱码解决方法 及 GBK 与 UTF-8 编码转换 问题在Windows上文件名的编码为GBK,而在Linux上文件名的编码为UTF-8。所以当在Windows上使用ftp方式从Linux上传下拉时,会导致上传文件名的中文变成了乱码,而下拉时找不到指定文件,解决办法:1、CentOS下 输入yum install convmvconvmv -f gbk -t utf-8 -r --notest /home/如果显示key...