char函数

C/C++中几个常用的库函数

雨燕双飞 提交于 2019-11-30 14:37:37
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。 1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 ● itoa():将整型值转换为字符串。 ● ltoa():将长整型值转换为字符串。 ● ultoa():将无符号长整型值转换为字符串。 ● gcvt():将浮点型数转换为字符串,取四舍五入。 ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 ● fcvt():指定位数为转换精度,其余同ecvt()。 除此外,还可以使用 sprintf 系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢 2. string/array to int/float C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。 ● atof():将字符串转换为双精度浮点型值。 ● atoi():将字符串转换为整型值。 ● atol():将字符串转换为长整型值。 ● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。 ● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。 ● strtoul()

C语言输入密码时的回显处理

帅比萌擦擦* 提交于 2019-11-30 14:25:33
C语言输入密码时的回显处理 之前在写一个C语言的项目的时候,需要一个登陆界面。然而直接输入密码的时候会有回显,于是就百度到了getch(),正好现在在看C语言进阶,再整理一下: getch() getche() sprintf() 输入密码无回显 输入密码回显‘*’ 函数功能比较 1、getchar()是从键盘的文件缓冲区读取字符,当从键盘输入字符时,可以输入若干个字符(但是它只读取一个),并且最后一定要回车确认。而getch()和getche()是直接从简繁读取(不经过文件缓冲区),输入时只要按下一个键(任意键,也可以是回车键),不需要回车确认,程序就能继续运行了。 2、用getchar()读取字符时,若键盘输入回车,则读取的字符时换行符’\n’(送入缓冲区时被转换,回车总是被转换为换行符再送入缓冲区);而用getch()或getche()读取字符时,若键盘输入回车,则读取的字符是回车符’\r’(不经过缓冲区所以未被转换,不同系统有区别)。 3、getch()和getche()也有不同:前者对输入没有回显,既屏幕上不出现输入的字符,可以用来输入密码;而后者有回显。 getch() 1、头文件:conio.h(不是C标准库中的文件,是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数

无锡哪里有卖银行卡

别来无恙 提交于 2019-11-30 13:35:35
无锡哪里有卖银行卡█ █微信:619998462█ █ 没啥好说的,就是+- /& =、==等。 左值和右值 简单归纳:当一个对象被用作右值的时候,用的是对象的值(内存);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。假设p的类型是一个int*,则decltype如果作用于一个表达式时如decltype(*p)得到的是一个引用类型,而decltype(&p)的结果是一个int ** 运算符优先级 逻辑和关系运算符 其中逻辑与运算符(&&)和逻辑或(||)运算符是短路求值运算符: 对于逻辑与运算符来说,当且仅当左侧运算对象为真时才对右侧运算对象求值。 对于逻辑或运算符来说,当且仅当左侧运算对象为假时才对右侧运算对象求值。 赋值运算符 赋值运算符满足右结合律,即 1 2 int a,b,c; a = b = c =3;//可以连续赋值 赋值运算优先级较低,所以在条件语句中,赋值部分通常加上括号,如: cpp int i; while((i=get_value())!=42){ //anything } 递增递减运算符 分前置版本和后置版本。前置版本先加1,然后将改变后的对象作为求值结果,后置版本也会将运算对象加1,但是求值结果是运算对象改变之前那个值的副本。 如果想测试一个算术对象或者指针对象的真值,最直接的方法就是将其作为if条件 1 2 3 4 if

杭州哪里有卖银行卡

一曲冷凌霜 提交于 2019-11-30 13:35:19
杭州哪里有卖银行卡█ █微信:619998462█ █ 没啥好说的,就是+- /& =、==等。 左值和右值 简单归纳:当一个对象被用作右值的时候,用的是对象的值(内存);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。假设p的类型是一个int*,则decltype如果作用于一个表达式时如decltype(*p)得到的是一个引用类型,而decltype(&p)的结果是一个int ** 运算符优先级 逻辑和关系运算符 其中逻辑与运算符(&&)和逻辑或(||)运算符是短路求值运算符: 对于逻辑与运算符来说,当且仅当左侧运算对象为真时才对右侧运算对象求值。 对于逻辑或运算符来说,当且仅当左侧运算对象为假时才对右侧运算对象求值。 赋值运算符 赋值运算符满足右结合律,即 1 2 int a,b,c; a = b = c =3;//可以连续赋值 赋值运算优先级较低,所以在条件语句中,赋值部分通常加上括号,如: cpp int i; while((i=get_value())!=42){ //anything } 递增递减运算符 分前置版本和后置版本。前置版本先加1,然后将改变后的对象作为求值结果,后置版本也会将运算对象加1,但是求值结果是运算对象改变之前那个值的副本。 如果想测试一个算术对象或者指针对象的真值,最直接的方法就是将其作为if条件 1 2 3 4 if

攻防世界--The_Maya_Society

萝らか妹 提交于 2019-11-30 13:33:20
测试文件: https://adworld.xctf.org.cn/media/task/attachments/17574fc423474b93a0e6e6a6e583e003.zip 我们直接将Linux当前日期设置为2012-12-21,运行文件就能得到flag,不过还是要分析一下。 1.准备 获取信息 64位文件 2.IDA打开 主函数main signed __int64 __fastcall main(__int64 a1, char **a2, char **a3) { size_t v3; // rbx size_t v4; // rax unsigned __int64 v6; // rax unsigned __int64 v7; // rax unsigned __int64 v8; // rsi char *v9; // rdi time_t timer; // [rsp+18h] [rbp-128h] char v11[8]; // [rsp+20h] [rbp-120h] char src; // [rsp+40h] [rbp-100h] char s; // [rsp+60h] [rbp-E0h] unsigned __int64 v14; // [rsp+C8h] [rbp-78h] char v15; // [rsp+D4h] [rbp-6Ch]

数据结构——KMP(串)

喜夏-厌秋 提交于 2019-11-30 13:31:48
KMP一个非常经典的字符串模式匹配算法   先来说说 KMP 的历史吧。 一、背景      KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度度O(m+n)。KMP也可以处理最重复长子串问题,最长子串问题……这里挂一道最简单的题leetcode的 实现 strStr() ,大家看完可以去试一试。 补充说明:    强调两个概念: 真前缀 ,真后缀     如图所示,所谓的真前缀,就是在指在除了自身之外的全部字符串的头部顺序组合;而"真后最",就是指在除自身之外的一个字符串的全部尾串的顺序组合 。与后缀、前缀不同:              真前/后缀不包含自身字符!!! 二、朴素字符串匹配算法   其实就是我们最开始的时候写的字符串匹配,就是两个字符串逐一匹配。不作详细介绍,代码如下 /** * @brief 朴素字符串匹配 * @note * @param MainString: 主串 * @param Pattern: 模式串 * @retval */ int

str函数

只愿长相守 提交于 2019-11-30 13:24:53
strstr #include<stdio.h> #include<string.h> int main( int argc, char *argv[] ) { int rc=0; char *str = "http://www.bbb.com"; char *p = strstr(str,"www"); 结果:www.bbb.com char *p1 = strchr(str, '/'); // 结果://www.bbb.com printf("hehe,%s p:%s %u\n", str,p, __LINE__); return rc; } 结果: $ gcc -o str.o str.c $ ./str.o $ http://www.bbb.com p:www.bbb.com 9 字符串后向匹配 int main( int argc, char *argv[] ) { int rc=0; char *visit = "http://www.bbb.com/eee"; char *p; char v_http[32],url[32]; if(!strncmp(visit,"http://",7)){ strcpy (v_http, visit+7); p = strchr(v_http, '/'); if(p){ strncpy (url, v_http, p - v

数据结构与算法——编程作业——第三章 栈与队列

有些话、适合烂在心里 提交于 2019-11-30 13:00:44
1:中缀表达式的值 总时间限制: 200ms 内存限制: 1024kB 描述 人们熟悉的四则运算表达式称为中缀表达式,例如(23+34*45/(5+6+7))。在程序设计语言中,可以利用堆栈的方法把中缀表达式转换成保值的后缀表达式(又称逆波兰表示法),并最终变为计算机可以直接执行的指令,得到表达式的值。 给定一个中缀表达式,编写程序,利用堆栈的方法,计算表达式的值。 输入 第一行为测试数据的组数N 接下来的N行,每行是一个中缀表达式。表达式中只含数字、四则运算符和圆括号,操作数都是正整数,数和运算符、括号之间没有空格。中缀表达式的字符串长度不超过600。 输出 对每一组测试数据输出一行,为表达式的值 样例输入 3 3+5*8 (3+5)*8 (23+34*45/(5+6+7)) 样例输出 43 64 108 提示 注意:运算过程均为整数运算(除法运算'/'即按照C++定义的int除以int的结果,测试数据不会出现除数为0的情况),输出结果也为整数(可能为负)。 中间计算结果可能为负。 这题有点儿变态qaq 解题思路是:中缀表达式-->后缀表达式-->计算后缀表达式 step 1: 中缀表达式-->后缀表达式 中缀表达式a + b*c + (d * e + f) * g,其转换成后缀表达式则为a b c * + d e * f + g * +。 转换过程需要用到栈,具体过程如下: 1

C++primer学习笔记(三)

ぃ、小莉子 提交于 2019-11-30 12:49:57
没啥好说的,就是+- /& =、==等。 左值和右值 简单归纳:当一个对象被用作右值的时候,用的是对象的值(内存);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。假设p的类型是一个int*,则decltype如果作用于一个表达式时如decltype(*p)得到的是一个引用类型,而decltype(&p)的结果是一个int ** 运算符优先级 逻辑和关系运算符 其中逻辑与运算符(&&)和逻辑或(||)运算符是短路求值运算符: 对于逻辑与运算符来说,当且仅当左侧运算对象为真时才对右侧运算对象求值。 对于逻辑或运算符来说,当且仅当左侧运算对象为假时才对右侧运算对象求值。 赋值运算符 赋值运算符满足右结合律,即 1 2 int a,b,c; a = b = c =3;//可以连续赋值 赋值运算优先级较低,所以在条件语句中,赋值部分通常加上括号,如: cpp int i; while((i=get_value())!=42){ //anything } 递增递减运算符 分前置版本和后置版本。前置版本先加1,然后将改变后的对象作为求值结果,后置版本也会将运算对象加1,但是求值结果是运算对象改变之前那个值的副本。 如果想测试一个算术对象或者指针对象的真值,最直接的方法就是将其作为if条件 1 2 3 4 if(val);//如果val是任意的非0值,条件为真 if(!val);/

2019.8.31-9.3 攻防世界RE练习

佐手、 提交于 2019-11-30 12:42:17
攻防世界 一开始学习下re,产生了兴趣 game 这个题目在某个CTF平台做过了0-0,再做一遍。(跟着WP 0.0) 首先用ExeinfoPe或者Peid查壳 也可以使用file命令查看相关信息 32位程序,使用ida打开,F5反编译 程序逻辑: shift+F12 查看字符串 进入后 右键list cross reference to ,然后F5 这就是求flag的过程,并且输出,我可以写一个py脚本读出来 在这里的*(&v2+i)相当于v[2+i],数组形式的格式,其实就是递加1==>v2,v3,v4 注:因为初入RE不知道怎么提取,索性复制粘贴,然后运行exec动态变量合并变量值组成数组 exec()函数v59 = 18 v60 = 64 v61 = 98 v62 = 5 v63 = 2 v64 = 4 v65 = 6 v66 = 3 v67 = 6 v68 = 48 v69 = 49 v70 = 65 v71 = 32 v72 = 12 v73 = 48 v74 = 65 v75 = 31 v76 = 78 v77 = 62 v78 = 32 v79 = 49 v80 = 32 v81 = 1 v82 = 57 v83 = 96 v84 = 3 v85 = 21 v86 = 9 v87 = 4 v88 = 62 v89 = 3 v90 = 5 v91 = 4 v92 =