C语言函数返回数组
C程序中,函数是不能直接返回一个完整的数组的,我们指定数组名本质是一个指针常量,那么能不能通过返回指针的方式间接返回数组呐?答案是不完全可以,函数内变量是局部变量,返回局部变量的地址是不可以的,但是由于静态变量的作用域为全局所有可以返回静态变量。所以这里有两种方式从函数中活动数组:返回静态变量地址、以指针参数的形式获得数组。
C程序中,函数是不能直接返回一个完整的数组的,我们指定数组名本质是一个指针常量,那么能不能通过返回指针的方式间接返回数组呐?答案是不完全可以,函数内变量是局部变量,返回局部变量的地址是不可以的,但是由于静态变量的作用域为全局所有可以返回静态变量。所以这里有两种方式从函数中活动数组:返回静态变量地址、以指针参数的形式获得数组。
在上篇文章中,目录结构是最终的形式,为了从最简单的Makefile开始,现在把Makefile文件当到src目录下方便演示,即
从本文开始,从一个简单的加密项目来完整实现完整的Makefile,静态库和动态库教程。本文环境为Debian 11 && gcc (Debian 10.2.1-6) 10.2.1 20210110
/ #根目录
|
|
|---- doc # 文档
|
|---- example # 示例
|
|---- include # 头文件
|
|---- src # 源码
|
|---- tests # 测试
|
|---- Makefile
|
|---- LICENSE
|
|---- README 在工作中要对接一些下位机,返回的数据中有些是BCD码(Binary-Coded Decimal),用4位二进制数来表示1位十进制中的0~9这10个数码,是一种二进制的数字编码形式。以下是8421类型的BCD码,还有其它格式的BCD码,但是没怎么遇到过,暂时不表。
这里要写的场景是,比如将字符串"10"变长数值"10",而不是真正意义上的转换,即类型转变string --> int,字面值不变,10还是10# number to string
在之前的文章中,实现了PKCS7填充,但是IV是固定的,从安全的角度来说,每经过一次加密和解密后IV应当重新随机生成。通过搜索,得知了一个概念:密码学安全伪随机数生成器(亦作密码学伪随机数生成器,英文:Cryptographically secure pseudo-random number generator,通称CSPRNG),之后在Github上找了一个C语言实现的库:CSPRNG
在上一篇介绍Tiny AES中,该库本身是没有提供填充模式的,所以,明文,密码,初始向量都是16字节的倍数,但是在实际使用中,明文是没有办法时时刻刻都是16字节的倍数的。所以需要找到一种填充方式。大部分PADDING模式为PKCS5和PKCS7,由于PKCS5填充是的8字节,PKCS7填充的是16字节,所以推荐使用PKCS7。
在上一篇文章中介绍了AES加密涉及到的参数,本文将介绍一个用C语言实现的AES库————tiny-AES-c,简单易使用。
从本文开始,打算写下AES加密,这里只是从使用的角度,原理需要密码学的知识,我是万万看不懂的。事情的起因很简单,在之前的文章网络监测服务之获取ping丢包率中我提到
一直在买VPS,但是对于网络的质量监测却从来也没在意过。这次想动手搭建一个简单的监测系统。
一般场景下nginx,php,mysql都是装在一台机器上的,那么没必要使用TCP模式来连接彼此,而是使用unix socket方式。
之前写C代码的时候,头文件都是复制粘贴过来的,时间久了,发现想自己手写代码的时候都不知道要包含哪些头文件了,所以稍微整理下。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main(void)
{
// uint8_t[4] 数组转成单个 10 进制数值
uint8_t uint8_t_array[]={0x00,0x00,0x08,0xcc};
uint32_t decimal = 0;
decimal = (uint8_t_array[0]<<24)|(uint8_t_array[1]<<16)|(uint8_t_array[2]<<8)|(uint8_t_array[3]);
printf("%d",decimal);
printf("\n\n");
// 将单个 10 进制数值转成 uint8_t[4] 数组
unsigned char hexBuffer[4]={0};
int i;
memcpy((char*)hexBuffer,(char*)&decimal,sizeof(int));
for(i=3;i>=0;i--)
printf("%02X ",hexBuffer[i]);
printf("\n\n");
return 0;
} MySQL5.1及之后就支持了事件。
fastcgi在nginx转发时选择:同台机器选择sock文件,速度快,但不能跨机器,TCP则可以跨机器。
本程序的作用,创建两个线程,线程A创建Unix套接字客户端,与Unix套接字服务端通信,收发数据,线程B创建websocket服务端,与浏览器通信,收发数据。
本程序的作用是,创建两个线程,线程A负责产生数据并存入数据库,线程B创建一个Unix套接字服务端并监听。
本文转载自知乎,原文链接:https://www.zhihu.com/question/54557903
在之前的文章:使用Socket发送非字符串数据中实现了socket发送非字符串数据的功能,我本以为是个完美的方案。但是在使用valgrind调试的时候发现了内存越界的问题。由于我是初学C,面对这个问题显得有些手足无措。还好经过了半天的试错,终于解决了。