cpp:cplusplus
putchar('a');// 输出一个字符
printf格式化输出函数,f就是format的缩写
puts(字符串); // 输出字符串并换行
getchar();// 输入一个字符
scanf格式化输入函数
gets(); // 输入字符串
h是head的简称,C语言分为源文件和头文件,源文件一般包含代码,头文件一般包含一些定义、声明。
#include
#include
#include
void main() {
char name[30];
int age;
// 输出字符串
printf("请输入你的姓名:\n");
// 输入字符串时需要指定界限。#字符串的值就是它的首地址#
scanf_s("%s", name, 30);
// scanf_s("hehe%s", name, 30); // 此时需要完全匹配格式控制才能正确赋值,否则数据无效。如输入hehea则name为a
printf("请输入你的年龄:\n");
// 输入整数
scanf_s("%d", &age);
printf("你是:%s,年龄是:%d\n", name, age);
// 系统执行命令
system("ipconfig");
// 暂停
system("pause");
// 参数分别是0:代表系统弹出;消息内容;消息标题;对话框类型
MessageBoxA(0, "没有网络连接!", "错误", 1);
// 参数分别是0:代表系统启动;open:打开、print使用打印机打印文件;指令;
// 第4、5个参数默认值都为0;
// 最后一个参数0:隐藏窗口、1:正常、3:最大化、6:最小化
ShellExecuteA(0, "open", "calc", 0, 0, 1);
// 打开网页
ShellExecuteA(0, "open", "", 0, 0, 1);
// 设置鼠标位置
SetCursorPos(200, 300);
// 单机鼠标左键
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Sleep(1000);
// 杀进程
system("taskkill /f /im iexplore.exe");
int num = 9;
// 按照16进制打印num的内存地址
printf("%x", &num);
printf("the num's value is : %d", num);
system("pause");
}
include时如果引用的是系统自带的头文件则使用<>,如果引用的是自定义的头文件则使用""。
调试时可以加断点对值进行修改,开始调试后,再调试 -> 窗口 -> 内存 -> 内存1,根据打印的内存值查找内存,右键值可以编辑值即修改。
常量定义
#define PI 3.14
const float PI = 3.14;
define只是定义一种符号,在编译期间用于替换后面的值。
const定义的是一个固定不变的变量,不可以在代码中修改,但可以通过获取变量内存地址在外部修改其值。
数据类型:有符号数据越界会产生错误、无符号数据越界会溢出。
随机数:
#include
#include
#include
void main() {
// 定义时间类型的变量
time_t time1;
// time方法:获取时间并赋值给time1变量
unsigned int hehe = (unsigned int)time(&time1);
// %u是无符号整型
printf("num: %u\n", hehe);
// 随机数发生器
srand(hehe);
int num = rand() % 100;
printf("num: %d", num);
getchar(); // 等待用户输入字符
}
写动态链接库dll文件时,函数需要用_declspec(dllexport)声明,且需要把项目的配置类型由“应用程序(.exe)”修改为“动态库(.dll)”,编译后用DllInject.exe注入工具进行注入。
修改配置类型步骤:
项目右键 -> 属性 -> 常规 -> 配置类型
注入步骤:
打开注入工具 -> 选择动态链接库文件 -> 加载时执行函数(即要注入的函数名)
切记:写动态链接库文件时必须用.c文件后缀,.cpp文件注入时会提示“动态链接库文件未导出”的相关错误信息。
注入例子:
#include
#include
void haha() {
for (int i = 0; i < 5; i++) {
// 有start表示并行执行命令,没有start则是线性执行命令
system("start calc");
}
}
_declspec(dllexport) void heihei() {
haha();
}
整型数据类型:
int num = 123;
printf("%6d\n", num); // 限定长度
printf("%ld\n", a); // 输出长整形整数
printf("%06d\n", num); // 长度不足则前面补0
printf("%-6d\n", num); // 左对齐
printf("%-06d\n", num); // 左对齐时前面补0无效
输出结果:
123
123
000123
123
123
字符串截取例子:
char name[30] = "heihei";
printf("%.2s\n", name); // 从前面截取字符串
输出:
he
浮点数例子:
float pi = 3.14;
printf("%f\n", pi); // 整数部分全部输出,小数部分输出6位(四舍五入或补0满足小数位数)
printf("%.1f\n", pi); // 保留一位小数
输出:
3.140000
3.1
printf("%%"); // 输出: %
%o:以无符号的八进制形式输出整数
%x:以无符号的十六进制形式输出整数
%u:以无符号的十进制形式输出整数
%e:以标准指数形式输出单、双精度实数
%g:选用输出宽度较小的格式输出实数且不输出无意义的0,根据数值大小自动选择用f格式或e格式输出。
goto无条件转移语句
说明:“语句标号”必须是合法的标识符,不能用整数做标号。
作用:与if语句一起构成循环结构、从多层循环体的内层跳到指定位置等。
目前不推荐使用goto语句。
与if构成循环的例子:
int i = 0;
int count = 0;
ADD: if (i < 100) { // 这里的ADD就是语句标号
i++;
count += i;
goto ADD;
}
printf("sum=%d\n", count);
输出结果:
sum=5050从多层循环体中跳出的例子:
for (int i = 0; i < 9; i++) {
for (int j = 2; j < 9; j++) {
if (j == i) {
printf("i = %d, j = %d\n", i, j);
goto OVER;
}
}
printf("这里还有其他语句");
}
OVER: printf("game over\n");
输出结果:
这里还有其他语句
这里还有其他语句
i = 2, j = 2
game over 例子没什么实际意义,就是说明下goto语句可以跳出多层循环。
c语言字符串注入命令 C语言基础之输入输出 常量定义 随机数 动态链接库的注入 数据类型介绍 goto语句的使用...