[c/c++] programming之路(3)、转义字符及内存

一、转义字符

1 #include<stdio.h>
2 
3 void main(){
4     printf("hello nworlda");//    n换行    a机器响一声
5     getchar();//等待
6 }
1 #include<stdio.h>
 2 
 3 void main(){
 4     //printf("hello world");
 5     putchar('h');
 6     putchar('e');
 7     putchar('l');
 8     putchar('l');
 9     putchar('o');
10     putchar('n');//转义字符也是一个字符
11     putchar('w');
12     getchar();
13 }
1 #include<stdio.h>
 2 
 3 void main1(){
 4     while(1)    putchar('a');
 5     putchar('A');//输出一个字符
 6     putchar('n');//换行
 7     getchar();
 8 }
 9 void main(){
10     //printf("\");//只有一个“”会报错
11     //putchar('\');
12     //printf(""");
13     putchar(''');
14     getchar();
15 }

二、hello world的N种做法

1 #include<stdio.h>
 2 
 3 void hello1(){
 4     printf("hello world");
 5 }
 6 void hello2(){
 7     printf("A%sB","hello world");//hello world取代%s
 8 }
 9 void hello3(){
10     printf("%c%c%",'h','e');
11 }
12 void hello4(){
13     putchar('h');
14     putchar('e');
15 }
16 void hello5(){
17     putchar(65);//ASCLL码
18     putchar(66);
19 }
20 void notepad(){//练习:用ascll码打印notepad
21     putchar(110);
22     putchar(111);
23     putchar(116);
24     putchar(101);
25     putchar(112);
26     putchar(97);
27     putchar(100);
28 }
29 void hello6(){//按照8进制输出helloworld
30     putchar(0150);//前面带0表示8进制
31     putchar(0145);
32     putchar(0154);
33     putchar(0154);
34 }
35 void hello7(){//按照16进制输出helloworld
36     putchar(0x68);//前面带0x表示16进制
37     putchar(0x65);
38     putchar(0x6c);
39     putchar(0x6c);
40 }
41 void hello8(){//按照8进制输出helloworld
42     putchar('150');//8进制的150所标志的字符
43     putchar('145');//        'ddd',3位八进制代表的字符
44     putchar('154');
45     putchar('154');
46 }
47 void hello9(){//按照16进制输出helloworld
48     putchar('x68');//        'xhh',16进制数据转换成编号,查找字符
49     putchar('x65');
50     putchar('x6c');
51     putchar('x6c');
52 }
53 void hello10(){
54     puts("hello world");
55 }
56 
57 void main(){
58     hello10();
59     getchar();
60 }

三、打开程序的n种做法

1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 void main(){
 5     //char str[50]="notepad";
 6     char str[50];
 7     //sprintf(str,"%s%s","note","pad");
 8     //sprintf(str,"%s","notepad");
 9     //sprintf(str,"%c%c%c%c",'c','a','l','c');
10     //sprintf(str,"%c%c%c%c",99,97,108,99);
11     //sprintf(str,"%c%c%c%c",0143,0141,0154,0143);//8进制
12     //sprintf(str,"%c%c%c%c",0x63,0x61,0x6c,0x63);//16进制
13     //sprintf(str,"%c%c%c%c",'143','141','154','143');//8进制
14     sprintf(str,"%c%c%c%c",'x63','x61','x6c','x63');//16进制
15 
16     printf(str);
17     system(str);//执行指令
18     system("pause");//暂停
19 }

四、通过内存地址改变变量的值

[c/c++] programming之路(3)、转义字符及内存

首先设置断点,进行调试

[c/c++] programming之路(3)、转义字符及内存

到达第一个断点时,打印出num变量的地址,根据地址查看到该地址存储的值为01

[c/c++] programming之路(3)、转义字符及内存

到达第二个断点,值变成了03

[c/c++] programming之路(3)、转义字符及内存

到达第三个断点,值变成了05,对其进行修改,将05改成59

[c/c++] programming之路(3)、转义字符及内存

[c/c++] programming之路(3)、转义字符及内存

16进制的59就等于10进制的89,最终打印出修改后的89,而非之前的5,这就是外挂改血量改蓝改攻击力的原理(找到需要修改数据的地址,然后对其进行修改)

五、加法改值

[c/c++] programming之路(3)、转义字符及内存

[c/c++] programming之路(3)、转义字符及内存

[c/c++] programming之路(3)、转义字符及内存

03改成09

[c/c++] programming之路(3)、转义字符及内存

[c/c++] programming之路(3)、转义字符及内存

六、打开多个程序

[c/c++] programming之路(3)、转义字符及内存

[c/c++] programming之路(3)、转义字符及内存

有的编译器一定要把变量的定义放在最前面,而不能随时定义char str[50];这条语句需要放在前面声明

原文链接: https://www.cnblogs.com/little-monkey/p/7191325.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/256889

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午10:30
下一篇 2023年2月14日 上午10:31

相关推荐