char

C++野指针的存在方式和误区

♀尐吖头ヾ 提交于 2020-02-26 02:40:48
1. char* x;这样的一定是野指针,指针声明时要直接初始化!或者置null也行! 2. 1 int main() 2 { 3 char *x=new char; 4 delete x; 5 cout<<*x; 6 getchar(); 7 return 0; 8 } delete x;之后,x就是一个野指针。 1 int main() 2 { 3 char *x=new char[10]; 4 cout<<*x; 5 strcpy(x,"dqwdqw"); 6 delete []x; 7 cout<<x; 8 getchar(); 9 return 0; 10 } 这段代码是能运行的,但delete[]x;之后,x就成为了一个野指针,输出的结果是未定义的。这里我们应该加上: x=nullptr; 或者malloc之后free掉的指针,也是上面的情况,一定要把指针置null。 3. 函数参数为二级指针&p,将p指向了函数中的临时变量。函数调用完毕后,p这个指针就变为了野指针。 1 int f(char** x){ 2 char p=97; //'a' 3 *x=&p; 4 } 5 int main() 6 { 7 char a=65; //'A' 8 char *x=&a; 9 f(&x); 10 cout<<*x; 11 getchar(); 12 return 0; 13

RC4加密

荒凉一梦 提交于 2020-02-26 02:35:13
介绍 在密码学 中 , RC4 (Rivest Cipher 4,也称为 ARC4 或 ARCFOUR, 意为所谓的RC4)是一种 流密码 。 尽管它以简单性和软件速度着称,但在RC4中发现了多个漏洞,使其不安全。 当 不丢弃 输出 密钥流 的开头 或使用非随机或相关密钥 时,它特别容易受到攻击 。 RC4的使用特别有问题,导致 协议 非常不安全, 例如 WEP。 参数介绍 参数名 说明 S S-box,长度为256的char型数组,char S[256] K 密钥Key,用户自定义,长度在1~256,用来打乱S-box T 临时变量,长度为256的char型数组 D 保存加密前/后数据 基本流程 初始化 S 和 T 数组。 初始化置换 S。 生成密钥流。 初始化S和T数组+初始化置换S void RC4_Init(unsigned char* S, unsigned char* K, unsigned int len) { int i, j = 0; unsigned char ch_tmp, T[256] = { 0 };//临时变量 for (i = 0; i < 256; ++i) { S[i] = i;//初始化S-box T[i] = K[i % len];//密钥填充临时数组 } //打乱S-box for (i = 0; i < 256; ++i) { j = (j

迟来的Json反序列化

牧云@^-^@ 提交于 2020-02-26 02:30:59
  源码发布 搞了一个下午,终于搞定了这个号称中国的github...以后源码直接在这里发布了(github实在用不来,英文实在太烂了) https://code.csdn.net/jy02305022/blqw-json   相关回顾 一种简单,轻量,灵活的C#对象转Json对象的方案 一种简单,轻量,灵活的C#对象转Json对象的方案(续)   废话 自从上次发表了Json序列化的方案之后,已经整整一个月了。 原本是想序列化写完马上开始写反序列化的,但是来看了大家的回复之后得到了很多启示,所以这一个月直接在做优化的工作(当然还有带BB)。 我发现博客园真是个好地方,以前在QQ空间,点点,微博发表技术文章的时候根本没有人回复,了不起有几个转载的。。。 在这里大家一起参与讨论,才能获得更多的启示和发现,才能更好的提高自己!   blqw.Json方案整体结构 blqw.Json ├─ JsonBuilder //用于将C#转换为Json字符串 ├─ QuickJsonBuilder //快速的将任意C#对象转换为Json字符串,继承自JsonBuilder ├─ UnsafeStringWriter //程序集可用,未公开对象.以非安全方式访问指针操作字符串直接写入内存,以提高字符串拼接效率 ├─ JsonParser //用于将Json字符串转换为C#对象 └─

递归-汉诺塔

雨燕双飞 提交于 2020-02-26 02:19:11
两个汉诺塔,一个是普通版的,另一个是加上必须经过中间柱子的。 # include <stdio.h> # include <iostream> # include <math.h> using namespace std ; int ans = 0 , n ; long long ans2 = 0 ; void hmove ( char a , char b , char c , int n ) { if ( n == 0 ) { return ; } hmove ( a , c , b , n - 1 ) ; //前n - 1块从a移动到b上 printf ( "%c -> %c\n" , a , c ) ; //我自己移动一块从a -> c ans ++ ; //我移动了几次? hmove ( b , a , c , n - 1 ) ; //最后把 n - 1块从b移动到c上 } //只能先移动到相邻的柱子上 void hmove2 ( char a , char b , char c , int n ) { if ( n == 0 ) { return ; } hmove2 ( a , b , c , n - 1 ) ; //把前n - 1块通过b移动到c上 ans2 ++ ; //把最后一块移动到b上 printf ( "%c -> %c\n" , a , b ) ;

存储持续性、作用域和链接性

北城以北 提交于 2020-02-26 00:00:01
例子: 头文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 这些源文件都包含头文件state.h。 需要定义一个全局变量供这些源文件中使用:方法如下 1、在 state.h声明全局变量: extern inta; 2、在state.cpp中定义该全局变量:int a =10; 这样其它源文件就可以使用该变量啦 这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义: (1)声明必须使用extern关键字;(2)不能给变量赋初值 extern int a; //声明 int a; //定义 int a = 0; //定义 extern int a =0; //定义 头文件中应使用extern关键字声明全局变量(不定义),如果这个变量有多个文件用到,可以新建一个cpp,在其中定义,把这个cpp加入工程即可。 头文件请不要定义任何变量,那是非常业余的行为…… 一般在头文件中申明,用extern,在cpp中定义。 如果在头文件中定义,如果这个头文件被多个cpp引用,会造成重复定义的链接错误。 头文件只能申明全局变量(extern),不可定义(不推荐使用) .cpp里,在最外层定义即可(int gi),直接引用 如果在.cpp里使用static定义,则该变量只在当前cpp文件中有效

error C3872: "0xa0": 此字符不允许在标识符中使用

泪湿孤枕 提交于 2020-02-25 23:50:03
最近写代码过程中,从网上粘贴一段代码,编译时报以下错误 最终通过查询资料得以解决: 问题原因:0xa0是十六进制数,换成十进制就是160,表示汉字的开始。 解决方案:在报错的代码行检查两边的空格,用英文输入法的空格替换掉 代码: char * wchar2char(const wchar_t* wchar ) { char * m_char; int len= WideCharToMultiByte( CP_ACP ,0,wchar ,wcslen( wchar ), NULL,0, NULL ,NULL ); m_char= new char[len+1]; WideCharToMultiByte( CP_ACP ,0,wchar ,wcslen( wchar ),m_char,len, NULL ,NULL ); m_char[len]= '\0'; return m_char; } 来源: CSDN 作者: 爱学习的蓝调 链接: https://blog.csdn.net/lihaidong1991/article/details/104503187

从无到有用Python创造一门属于自己的编程语言1

安稳与你 提交于 2020-02-25 23:37:24
前言 如果你会编译原理,对其中的词法分析算法,语法分析算法足够了解,那么用什么语言来做这样的一件事情都是可以的,之所以使用Python只是因为本人会的编程语言中, Python的使用时间最长,也最得心应手。所谓性能什么的不在本文的考虑范围内, 本文主要重点是语法分析的表达式的解析,语法解析使用的是普拉特分析法,一种自顶向下的语法解析方法。 文章目录如下: 四则运算的问题 词法分析 语法分析与解释执行 参考链接 这有什么用 后记 源代码 四则运算的问题 怎么解决让代码算出以下解决结果?(假设问题代码保存文1.txt) 1 + 2 * 3 - 4 / 5 不用语法分析, 最简答的解决办法就是 with open("1.txt") as rf: print(eval(rf.read())) # 输出结果 6.2 那么如果是以下面的代码呢?(假设问题代码保存文2.txt) add(1, add(1,2)) 不用语法分析, 最简单的解决办法是 def add(a, b): return a + b with open("2.txt") as rf: print(eval(rf.read()), dict(add=add)) # 输出结果 4 {'add': <function add at 0x0000013E8033AD90>} 如果要求加法的优先级大于乘法呢?就是说先加后乘,比如1+2

命令行参数————(int argc,char *argv[])

寵の児 提交于 2020-02-25 21:38:22
命令行参数————(int argc,char *argv[]) C 编译器运行 main() 没有参数或者有两个参数(一些实现允许 main() 有更多参数,属于对标准的扩张) 。 main() 函数有两个参数时,第一个参数是命令行中的字符串数量。过去,这个 int 类型的参数被称为 argc ( 表示参数计数 : arguemnet count )。系统用空格表示一个字符串的结束和下一个字符串的开始。 命令行字符串存储在内存中,而字符串的地址存储在指针数组中。而该数组的地址则被存储在 main() 的第二个参数中。按照惯例,这个指向指针的指针称为 argv ( 表示参数值 [ arguement value ])。 main() 函数中的形式参数与其它带形参的函数相同。许多程序员用不同的形式声明 argv : int main ( int argc , char * * argv ) char **argv 与 char *argv[] 等价,也就是说, argv 是一个指向指针的指针,它所指向的指针指向 char 。因此,即使在原始定义中, argv 也是指向指针的指针。两种形式都可以使用,但我们认为第一种形式更清楚的表明 argv 表示一系列字符串。 来源: CSDN 作者: Masschusates 链接: https://blog.csdn.net/qq

C++ Primer 5th 第11章 关联容器

一个人想着一个人 提交于 2020-02-25 20:43:28
练习11.1:描述map 和 vector 的不同。 map是关联容器,vector是顺序容器,关联容器与值无关,vector则与值密切相关 练习11.2:分别给出最适合使用 list、vector、deque、map以及set的例子。 list链表 vector动态数组 deque队列 map映射 set集合 练习11.3:编写你自己的单词计数程序。 #include <iostream> #include <map> void words_count() { std::map<std::string, std::size_t> m; std::string word; while (std::cin >> word) { ++m[word]; } } int main() { words_count(); return 0; } 练习11.4:扩展你的程序,忽略大小写和标点。例如,"example."、"example,"和"Example"应该递增相同的计数器。 #include <iostream> #include <map> void words_count() { std::map<std::string, std::size_t> m; std::string word; while (std::cin >> word) { for (auto& ch : word

C语言字符串去掉指定字符

孤街浪徒 提交于 2020-02-25 20:18:32
一、去掉字符串指定字符 1 #include <stdio.h> 2 #include <string.h> 3 4 void del_char(char a[],char c) 5 { 6 int i,j; 7 for(i=0,j=0; *(a+i)!='\0'; i++) 8 { 9 if(*(a+i)==c) 10 continue; 11 else 12 { 13 *(a+j)=*(a+i); 14 j++; 15 } 16 } 17 *(a+j)='\0'; 18 } 19 int main() 20 { 21 char a[100],c; 22 scanf("%s %c",a,&c); 23 del_char(a,c); 24 printf("%s",a); 25 return 0; 26 } 运行结果: 注: 如果想去掉字符串最后一个字符,简便方法是:str[strlen( str ) - 1] = '\0'; 来源: https://www.cnblogs.com/yinguojin/p/12363330.html