char函数

argz_create函数

☆樱花仙子☆ 提交于 2019-12-04 13:11:10
函数位于glibc源码中的../glibc-version/string/argz-create.c中,其作用是将Unix-style的参数数组argv转换成一个argz vector。 argz vector是存储在连续空间的一维字符数组,彼此之间以空字符(\0)进行分隔。 也就是说argz_create函数的目的是将二维的argv转换成一维数组,并且内容不变,保留\0作为字符串之间的分隔符。 函数声明如下: // argz.h /* Make a '\0' separated arg vector from a unix argv vector, returning it in ARGZ, and the total length in LEN. If a memory allocation error occurs, ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ extern error_t __argz_create (char *const __argv[], char **__restrict __argz, size_t *__restrict __len) __THROW; extern error_t argz_create (char *const _

replace去除空格

旧街凉风 提交于 2019-12-04 12:04:10
执行redis 命令的时候会默认用 空格 分割命令,所以当value 中存在空格,就会导致命令执行错误。于是,我想到了用replace函数去除空格,发现了几个注意事项: 单引号里面必须有值,替换空字符用'\0',也可以达到移除的效果 replace函数是直接修改入参的!所以必须保证入参不是常量 /usr/include/c++/4.8.2/bits/stl_algo.h: In instantiation of ‘void std::replace(_FIter, _FIter, const _Tp&, const _Tp&) [with _FIter = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >; _Tp = char]’: OrderPool.cpp:226:85: required from here /usr/include/c++/4.8.2/bits/stl_algo.h:4998:13: error: assignment of read-only location ‘__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator*<const char*, std::basic_string

FAT12 img tool

与世无争的帅哥 提交于 2019-12-04 09:32:17
NJU/2019/OS Description: CODE: Main.cpp: 1 /* 2 @author: Edwin Xu 3 @Date:2019/11/13 4 @Note: just ASCII 5 */ 6 #include <cstdio> 7 #include <cstdlib> 8 #include <cstring> 9 #include <iostream> 10 #include <string> 11 #include <iostream> 12 #include <vector> 13 14 #define IMG_PATH "a.img" 15 16 using namespace std; 17 18 //myPrint in NASM 19 extern "C" {void myPrint(char *c,int len,int color);} 20 //print func using myPrint() 21 char chars[513]; 22 void print(string s,int color){ 23 const char * c = s.c_str(); 24 strcpy(chars,s.c_str()); 25 myPrint(chars,s.length(),color); 26 } 27 28 29 30 /

零基础入门之结构体字节对齐

会有一股神秘感。 提交于 2019-12-04 08:32:59
一、字节对齐的规则: 1、一般设置的对齐方式为1,2,4字节对齐方式。结构的首地址必须是结构内最宽类型的整数倍地址;另外,结构体的每一个成员起始地址必须是自身类型大小的整数倍(需要特别注意的是windows下是这样的,但在linux的gcc编译器下最高为4字节对齐),否则在前一类型后补0;这里特别提到的是数组一定要注意,而且在一些编程的技巧中,我们可以使用数组强制字节达到对齐的目的。这在网络编程中是很常见的。 举例:比如CHAR型占用空间为1字节,则其起始位置必须可被1整除。INT为4字节,其起始位置必须被4带队,依次类推。(我们假定类或结构体的起始位置为0位置,其实编译器是在开辟空间时,会寻找起始位置可被结构内最宽类型整除的地址做为开始地址,因此我们可以假定其为0值,因为这0值可以被任意的类型整除。) 2、结构体的整体大小必须可被对齐值整除,默认4(结构中的类型大小都小于默认的4)。 3、结构体的整体大小必须可被本结构内的最宽类型整除。(其实和上一条是一样的,但这里独立出来,起注意作用。比如结构体里的有DOUBLE,那么结构的大小最后必须可被8整除) 注意:GCC不是这样,就是最高只能被4整除。此为32位系统,64为系统也会采用8整除的方式。否则(2、3条),编译器会在结构的最后添充一定的特定字符来补齐。 struct T { char ch; double d ; };

SPI通信协议(SPI总线)学习

只愿长相守 提交于 2019-12-04 08:06:43
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 支持全双工通信 通信简单 数据传输速率块 没有指定的流控制,没有应答机制确认是否接收到数据, 所以跟IIC总线协议比较在数据可靠性上有一定的缺陷 。 1):高速、同步、全双工、非差分、总线式 2):主从机通信模式 1):SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多 个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共 有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。 (1)SDO/MOSI – 主设备数据输出,从设备数据输入; (2)SDI/MISO – 主设备数据输入,从设备数据输出; (3)SCLK – 时钟信号,由主设备产生; (4)CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设 备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需 要将从设备对应的片选引脚电平拉低或者是拉高。 2):需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配 置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们

Oracle数据库小知识点整理

假装没事ソ 提交于 2019-12-04 07:57:49
-- 数据库存储数据 -- 市面上主流的数据库有哪些 -- 甲骨文 oracle mysql -- IBM db2 金融 -- 微软 sqlserver --这些是关系型数据库。 --NOSQL 不仅仅是sql,典型 mongodb. ----------------- ---------------------------------------- --数据库的语言有哪些分类 -- ************************************** /*** 1.数据定义语言(DDL),create,alter,drop 2.数据操纵语言(DML),select,update,insert,delete 3.数据事务语言, commit,savepoint,rollback 事务特性:原子性,一致性,持久性,隔离型, ...........后面补充............. 在关系型数据库中数据是以table (二维数据结构,行和列的形式) 来组织数据 table 就是表来组织数据,这个table的设计的规范是什么? --三范式 ***************** --第一范式:数据库表中的字段应该最小单位, 是不能够分割(本地化) --第二范式:数据库表中的一个字段 不能由另外一个字段通过计算得出。 age birthday 工资 养老保险费用 ***/ ------

VirtualAlloc加载shellcode免杀一点记录

若如初见. 提交于 2019-12-04 07:47:58
一个很好的学习网站 推荐一下: https://docs.microsoft.com/zh-cn/windows/win32/api/ 0x01 VirtualAlloc VirtualAlloc: 在虚拟地址空间中预定一块内存区域; VirtualAlloc是Windows提供的API,通常用来分配大块的内存。 PVOID VirtualAlloc(PVOID pvAddress, SIZE_T dwSize, DWORD fdwAllocationType, DWORD fdwProtect) VirtualAlloc (PVOID 开始地址,SIZE_T 大小,DWORD 类型,DWORD 保护属性) VirtualQuery SIZE_T WINAPI VirtualQuery( _In_opt_ LPCVOID lpAddress, _Out_ PMEMORY_BASIC_INFORMATION lpBuffer, _In_ SIZE_T dwLength ); MEMORY_BASIC_INFORMATION结构 包含有关进程的虚拟地址空间中的页面范围的信息。该 VirtualQuery来和 VirtualQueryEx函数使用这种结构。 句法 typedef struct _MEMORY_BASIC_INFORMATION { PVOID BaseAddress;

CPRIMER CHAP13

旧时模样 提交于 2019-12-04 07:02:05
一、文件   C把文件看作一系列连续的字节,每个字节都是单独读取。   提供两种访问文件的路径:二进制模式和文本模式。   标准文件:标准输入、标准输出、标准错误输出   标准输入函数:getchar、scanf   1.1 getchar()   C 库函数 int getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数。   该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。   1 #include <stdio.h> 2 int main(void) 3 { 4 char ch; 5 ch = getchars(); 6 printf("%c", ch); 7 }   1.2 scanf()   C 库函数 int scanf(const char *format, ...) 从标准输入 stdin 读取格式化输入。   参数 format -- 这是 C 字符串,包含了以下各项中的一个或多个: 空格字符、非空格字符 和 format 说明符 。 format 说明符形式为 [=%[*][width][modifiers]type=] ,具体讲解如下: 参数 描述 * 这是一个可选的星号,表示数据是从流 stream 中读取的

#define用法

倾然丶 夕夏残阳落幕 提交于 2019-12-04 06:29:12
宏定义 作用范围:定义行后的语句块,可以是全局变量或局部变量 本质:宏替换(在程序中使用宏名,在预处理(或预编译)时期进行内容替换) 好处: 1、提高可读性 2、对一些简单的函数进行宏定义,无需函数调用,运行效率高。 3、 可维护性好 define中的三个特殊符号 1、##。 宏定义:#define Conn(x,y) x##y x,y的连接,可以返回int/浮点类型的数据(不能连接两个浮点数),也可以连接变量 1 ... 2 3 #define ADD_TO_ax(x,val) a##x += val 4 5 int main() 6 { 7 int a1 = 0; 8 ADD_TO_ax(1, 5); 9 cout<<a1; 10 return 0; 11 } 2\\ 2、#@ 宏定义:#define ToChar(x) #@x 返回const char类型字符,x只能是单个字符,否则编译器报错或返回 最后一个字符 3、# 宏定义:#define ToString(x) #x 返回const char *类型,即“x” 注意:三种宏定义括号中的变量名全为常量,不能表示变量 1 #include <iostream> 2 using namespace std; 3 4 #define Conn(x,y) x##y 5 #define ToChar(x) #@x 6

C/C++指针,预处理

和自甴很熟 提交于 2019-12-04 05:30:32
C/C++指针 int a; int* p = &a; // 指向a地址的指针*p 1、与const一起的时候   char * const p; // 指针不可变,也就是指针只能指向一个地址char* p的指针;   char const * p; // 所指内容不可改,也就是 p是常量字符串   char const * const p; // 内容和指针都不能改   const char * const p; // 同上...内容和指针不能改    2、str[]和 str的区别 #include <iostream> using namespace std; int main() { char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << (