Unity IL2CPP逆向深度解析:Cpp2IL实战指南与高级应用
2026/6/21 1:32:57
输入是以行进行的,也就是每有一个scanf行输入一个回车
scanf输入时需要注意的点
如果一次输入如多个数据,则需要按照分割参数的方法分割开输入的数据
使用scanf_s读取三个整数,输入时需要严格匹配格式字符串中的分隔符
使用%c读取字符时,前序输入的回车 / 空格会被当作字符读取:
// 示例:先输入整数,再输入字符 int a; char ch; scanf("%d", &a); // 输入10后按回车 scanf("%c", &ch); // 此时ch会读取到“回车符(\n)”,而非预期的字符解决:在%c前加空格,跳过空白符:
scanf(" %c", &ch); // 空格会匹配任意空白符(回车/空格/制表符)%s的截断问题:%s会读取到 “空白符(空格 / 回车)” 为止,无法读取带空格的字符串(如输入hello world,只会读取hello);scanf_s的长度参数错误:若传入的长度参数大于缓冲区实际长度,仍会导致溢出(需严格传数组长度-1,预留\0位置):char str[5]; scanf_s("%s", str, 10); // 错误:长度10超过数组长度5若输入的内容与格式符类型不匹配(如用%d读取字母),输入流会残留错误数据,导致后续输入全部失败:
int a; while (1) { printf("输入整数:"); scanf("%d", &a); // 若输入字母,scanf返回0(匹配失败),错误数据留在输入流 }解决:匹配失败时清空输入流:
if (scanf("%d", &a) != 1) { while (getchar() != '\n'); // 清空当前行的错误输入 printf("输入错误,请重新输入!\n"); }处理多组输入时,错误使用while(scanf(...))的终止逻辑:
// 错误:输入EOF(Ctrl+Z/Ctrl+D)时才终止,但实际场景中易遗漏终止条件 int a; while (scanf("%d", &a) == 1) { printf("%d\n", a); }解决:明确业务终止条件(如输入 0 终止):
int a; while (1) { scanf("%d", &a); if (a == 0) break; // 输入0时终止 printf("%d\n", a); }—所有的变量在第一次被使用(出现在赋值运算符右边)之前应该被初始化一次
如果强行赋值会报错
用名字表示一个数字的含义,
放在int main()函数里面开头位置可以很快地找到
a*-b是先算-b再算a*(-b)
a++和++a的运算结果是有区别的,虽然都对a进行了+1
但是a++是取得了a+1之前的结果(a确实也放在前面),a++表达式的值是a的原来的值