char函数

BUUCTF--刮开有奖

匿名 (未验证) 提交于 2019-12-02 23:59:01
文件链接: https://buuoj.cn/files/abe6e2152471e1e1cbd9e5c0cae95d29/8f80610b-8701-4c7f-ad60-63861a558a5b.exe?token=eyJ0ZWFtX2lkIjpudWxsLCJ1c2VyX2lkIjoxOTAzLCJmaWxlX2lkIjoyMDd9.XXT5Dg.7mQMViMZzaEYSVj_dfXyRr4aPKQ 1.准备 获取信息 32位文件 2.IDA打开 进入主函数WinMain int __stdcall WinMain ( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nShowCmd ) { DialogBoxParamA ( hInstance , ( LPCSTR ) 0x67 , 0 , DialogFunc , 0 ); return 0 ; } 找到关键的函数DialogFunc,并反编译为C代码 1 BOOL __userpurge DialogFunc@ <eax> ( int a1@ <edi> , int a2@ <esi> , HWND hDlg , UINT a4 , WPARAM a5 , LPARAM a6 ) 2 { 3 const char * v6 ;

使用memset初始化int数组

匿名 (未验证) 提交于 2019-12-02 23:57:01
memset()是一个来自于string库的函数,正规用法是初始化char类型的数组。因为char类型只占1个字节,memset按字节赋值后,会将char类型数组的所有元素变为你指定的值。但是 来源:博客园 作者: MiserWeyte 链接:https://www.cnblogs.com/miserweyte/p/11461574.html

C++ 字符(char)指针

匿名 (未验证) 提交于 2019-12-02 23:57:01
在 上一章 中, 详细讲解了普通 指针一维数组 的用法, 现在来介绍一下 字符指针 如果不是你想查看的内容, 可以看: 指针目录 char 指针的声明方式与普通指针一致, 但有一些 特殊的地方 char 指针可以 看作是字符串 , 比如说: const char *str="HelloWorld!"; 如果对 const 比较陌生, 可以看 这里 对于字符串指针的创建, 上面的是一种, 而我本人更建议申请空间, 释放空间的 标准指针操作 比如说这里: #include <iostream> #include <cstring> using namespace std; int main() { char *str=new char[101]; cin>>*str; cout<<*str<<endl; delete[] str; return 0; } 现在问题来了 输入 : TweeChalice 输出 : T 有没有想过怎么会这样呢?------如果你想不出来, 请再次阅读 C++指针与一维数组 在阅读上一章后, 我们已经知道 数组是一个连续的空间 而我们是怎么输入的? cin>>*str; 这个输入的是 str[0], 后面的输入 完全省略 而我们又怎么输出的? cout<<*str; 这个输出的是 str[0] 现在知道是怎么回事了吧! 但是我们要怎么 输入一个 char

汉诺塔问题(分治递归思想)

匿名 (未验证) 提交于 2019-12-02 23:56:01
汉诺塔的基本思想就是 1.先把上面n-1个通过c转移到b(因为我的c里面要放n,也就是最大的那个) 2.把a中的 n(最大的那个)移动到c 3.再把b中的n-1个通过a移动到c; 整个过程就结束了,然后递归调用这个函数,每一层递归都执行这三个步骤 最后n=1的时候,想象一下,n=1的时候,是不是把c中的1直接移到c中即可,所以这就是终止条件。今天可算是理解了汉诺塔的原理了!!!` `` #include using namespace std; void movef(int n,char a,char b){ cout<<“把”<<n<<“从”<<a<<“移动到”<<b<<endl; } void haniod(int n,char a,char b,char c){ if(n==1){ movef(n,a,c); }else{ haniod(n-1,a,c,b); movef(n,a,c); haniod(n-1,b,a,c); } } int main(){ int n; cin>>n; haniod(n,‘a’,‘b’,‘c’); } 来源:51CTO 作者: 北派胖子 链接:https://blog.csdn.net/qq_43568790/article/details/100147676

拷贝控制

匿名 (未验证) 提交于 2019-12-02 23:56:01
1. 拷贝构造函数    如果一个构造函数的 第一个参数是自身类型的引用 ,且额外参数都有默认值,则此构造函数是拷贝构造函数。    而合成拷贝构造函数是缺省的拷贝构造函数,即默认的拷贝构造函数,一般情况下,它的实际操作是 对所有成员变量进行一次赋值操作 。 如果成员的缺省的赋值操作不能满足需求(如是一个链表或含有指针) ,就必须要对成员类定义重载赋值操作符,才能够让合成拷贝构造函数起作用。    通常 在函数的调用时,使用非引用的对象类型作函数参数时,这个时候会调用该类的拷贝构造函数 ,如下形式: #include <string> #include <string.h> #include <stdlib.h> #include <iostream> using namespace std ; class Book { private : char * _bookISBN ; float _price ; public : Book ( char * ISBN , float price = 0.0f ): _price ( price ){ _bookISBN = ( char *) malloc ( strlen ( ISBN ) + 1 ); strcpy ( _bookISBN , ISBN ); cout << "构造函数被调用." << endl ; } Book (

gsoap使用

匿名 (未验证) 提交于 2019-12-02 23:55:01
一. 安装gsoap 下载地址: http:/ /sourceforge.net/projects /gsoap2/files / 解压安装:./configure -- prefix=/usr/local/gsoap && make && make install 示例目录:gsoap-2.8/gsoap/samples 有各类语言使用接口方法 async chaining gmt Makefile mashup README . txt udp xml - rpc - json atom chaining ++ googleapi Makefile . am mashup ++ rest varparam autotest curl hello Makefile . cpp_proxy_rules mtom roll wcf aws databinding httpcookies Makefile . cpp_proxy_rules_j mtom - stream router webserver calc dime link Makefile . cpp_rules oneway rss wsa calc ++ dom link ++ Makefile . c_rules oneway ++ ssl wsrm calc_vs2005 factory lu Makefile .

C++基础-函数

匿名 (未验证) 提交于 2019-12-02 23:55:01
1. 函数简介 传值和传址 。 在函数调用结束后,实参不会跟随形参而改变。 如果要改变实参的值, 只能通过指针传递。如果函数是“只读函数”,为了防止数据/地址传递增加破坏数据的风险,需要在形参中增加const标识符来解决。 1.2 函数的递归 递归常用于重复性的程序当中。 在递归中,每次递归调用都会创建自己的一套变量,保存在不同的地址空间当中 。如下所示,可以用栈的入栈和出栈来表示递归。 void countdown(int n){ cout<<"Counting down ..."<<n<<" (Address at "<<&n<<")"<<endl; if(n>0) countdown(n-1); cout<<n<<" Up"<<" (Address at "<<&n<<")"<<endl; } int main(){ countdown(5); //递归调用 } 1.3 内联函数 inline 。但是,如果一个函数内部没有几条语句,执行时间本来就非常短,那么这个函数调用产生的额外开销和函数本身执行的时间相比,就显得不能忽略了。 将整个函数体的代码插人调用语句处,就像整个函数体在调用处被重写了一遍一样。 内联函数 (inline) 与宏 (#define) 的区别 内联函数是通过参数的传递实现的,而宏定义是通过文本的替换实现 。 #define SQUARE(X) X*X /

C语言的内存管理

匿名 (未验证) 提交于 2019-12-02 23:52:01
堆和栈的区别: 栈的特征 执行的速度相对较快; 空间较小; 生存期由系统决定; 作用域较小; 有名空间,可以通过变量名或者数据名访问; 堆的特征 执行的速度相对较慢; 空间较大; 生存期由“自己”决定,malloc申请,free释放; 作用域很大(整个程序都可以访问); 无名空间,只能通过指针使用; C语言空间的申请 malloc 功能: 分配 size 字节的未初始化内存。若分配成功,则返回指向分配内存块最低位(首位)字节的,为任何拥有基础对齐的对象类型对齐的指针。 头文件: #include<stdlib.h> 原型: void* malloc( size_t size ); 参数: size - 要分配的字节数 返回值: 成功时:返回指向新分配内存的指针。为避免内存泄漏,必须用 free() 或 realloc() 解分配返回的指针。 失败时:返回空指针。 说明: malloc申请的空间为连续空间;malloc申请的是没有初始化的空间; 返回值类型是void * 该类型表明malloc返回的地址空间中的数据类型是不确定,必须经过强制类型转换才可以使用。 realloc 功能: 先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间

C/C++中extern关键字详解

僤鯓⒐⒋嵵緔 提交于 2019-12-02 23:51:35
转自 https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 1 基本解释 :extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为C++支持函数的重载啊,在这里不去过多的论述这个问题,如果你有兴趣可以去网上搜索,相信你可以得到满意的解释! 第二,当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern int g_Int; 它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用,记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段

C 库函数 - strcspn()

匿名 (未验证) 提交于 2019-12-02 23:49:02
定义 size_t strcspn(const char *str1, const char *str2) 参数 str1 -- 要被检索的 C 字符串。 str2 -- 该字符串包含了要在 str1 中进行匹配的字符列表。 描述 该函数返回 str1 开头连续都不含字符串 str2 中字符的字符数。 例子 #include <stdio.h> #include <string.h> int main () { int len; const char str1[] = "ABCDEF4960910"; const char str2[] = "013"; len = strcspn(str1, str2); printf("第一个匹配的字符是在 %d\n", len + 1); return(0); } 输出 第一个匹配的字符是在 10 参考: https://www.runoob.com/cprogramming/c-function-strcspn.html