C++

C++开发知识要点整理(有关文件操作)

发布于 2022-10-07 17:26:03

C++开发基础知识要点整理.

查看更多

浏览量
8614
9 个回答
猫哥
猫哥 项目组成员 2022-10-10
希望我的回答能对你有所帮助

C++入口函数Main接受的参数argc argv的作用和使用方法
argc 整型 保存接受的命令行参数的个数,含exe工具本身,所以至少等于1.
argv 字符指针数组 保存了 命令行各参数.

argv[1] 就是第一个命令行参数.

猫哥
猫哥 项目组成员 2022-10-07
希望我的回答能对你有所帮助

常见头文件的使用
include <iostream> 标准输入输出库,在使用cout cin时导入使用.
using namespace std; 在使用cout时可以将 std::cout 简写为 cout.
include <string> 字符串库, 使用字符串变量 std::string a = "sss";

猫哥
猫哥 项目组成员 2022-10-11
希望我的回答能对你有所帮助

C++关于内嵌汇编的写法于注意事项

string check_str = content.substr(0x18);
char* check_str_pointer = &check_str[0];
unsigned int check_num = 0;
__asm {
    //初始化区域
    mov rbx, 0
    mov rcx, 0
    mov rdx, 0x3C24

    mov rax, check_str_pointer //不可以直接将变量赋值给r8寄存器
    lea r8, [rax]
    mov rax, 0

    mov r9, 0
    mov r10, 0x3C1C

    //内嵌汇编执行体
    monark_1234:
    movzx ecx, byte ptr[r8]
    lea r8, qword ptr[r8 + 0x1]
    imul edx, r9d, 0x1F
    inc rax
    add edx, ecx
    mov r9d, edx
    cmp rax, r10
    jne monark_1234
    mov check_num, r9d //最后获取寄存器的值要保证数据的类型长度一致
}
return check_num;
猫哥
猫哥 项目组成员 2022-10-11
希望我的回答能对你有所帮助

C++有关操作字符串的函数

//字符串长度
str.length();
str.size();
//字符串插入值
str.insert(1,"aaa"); //在1的位置插入aaa
//字符删除
str.erase(2,4); //删除从2开始的4个字符,没有len就删除到末尾.
//字符追加
str.append("ddd");
//字符替换
str.replace(2,6,"ccc"); //从2的位置删除6个字符,并使用ccc替换
//查找
str.find("a"); //查找 s 中 a 第一次出现的位置
str.rfind("a"); //查找 s 中 a 最后一次出现的位置
str1.find_first_of("a"); //在 s 中查找 a 中任何一个字符最早出现的位置
str1.find_last_of("a"); //在 s 中查找 a 中任何一个字符最晚出现的位置
str1.find_first_not_of("a"); //查找 s 中 第一个不在 a 中的字符的位置
str1.find_last_not_of("a"); //查找 s 中 最后一个不在 a 中的字符的位置

//字符串转数字 转为整型
stoi("16");  转化为 16
stoi("16",nullptr,8); 八进制转化
stoi("16",nullptr,16); 16进制转化
stoi("16",nullptr,2); 二进制转化
//转为浮点型
stof("16.22");
stod("16.323422343432");
stold("16.34343"); //long double
猫哥
猫哥 项目组成员 2022-10-12
希望我的回答能对你有所帮助

变量名: 是一个标识符,指代一块内存区域,它不是内存地址.它只是给编译器看的,计算机并不存储变量名.
C++中数组 使用大括号表现数组内容 int arrs[] = {0,1,2,3,4}
__int64 是C++中定义64位整型的类型.
__fastcall 指定了函数调用约定,它和stdcall类似. 函数的第一/第二参数由ecx / edx 传递,其他参数通过从右向左的顺序入栈.

C++开发中一定要注意不能出现同名变量.

对于 R8~R15 寄存器,我们可以使用 r8, r8d, r8w, r8b 分别代表 r8 寄存器的64位、低32位、低16位和低8位。

rax-64 eax-32 ax-16 ah-8 al-8

猫哥
猫哥 项目组成员 2022-10-12
希望我的回答能对你有所帮助

C++中关于内存中数据到底时什么类型的分析
内存中存的是二进制数据,至于在某个内存地址下存的到底时字符数据还是整型数据,这个从内存数据本身是看不出来的,而要看跳转的指针类型是什么,指针是整型,就是读取4字节数据,指针是字符型就是读取1字节内容.

//可以通过修改指针类型,修改内存数据
string chars = "abcdefghijklmn";
int * point = reinterpret_cast<int *>(&chars[1]);
*point = 61;
cout << chars << endl; //输出:a=fghijklmn 61刚好就是=
猫哥
猫哥 项目组成员 2022-10-10
希望我的回答能对你有所帮助

有关字符指针和数组的关系
一篇很棒的文章, [深入 char ,char ,char a[ ] ,char a[] 内核](https://blog.csdn.net/daiyutage/article/details/8604720)

猫哥
猫哥 项目组成员 2022-10-10
希望我的回答能对你有所帮助

C++ 打开二进制文件操作

#include <fstream>

//代码区域
fstream fop(filename,ios::binary); //如果这里不使用binary方式,读取的数据遇到0x1A这种字符信息,就会当作EOF/终止符 来看待. 导致获取的数据不能全部读取出来.
if(fop.fail()){
    cout << "文件打开失败" << endl;
}

说明1: 这里的filename,可以是绝对路径比如"D:\files\a.bat"; 也可以直接写文件名,比如"b.bat",这个时候b.bat文件需要放置在于main.cpp文件同一目录下才可以找到.

//文件流的读取指针位置控制
fop.seekg(0,ios::end); //文件末尾
streamop pos = fop.tellg();  //开始到当前指针的距离
int file_size = pos; //这样可以获得文件大小
fop.seekg(0,ios::beg); //文件开始

将文件的信息读取出来存入字符串变量

string file_content;
file_content = string(istreambuf_iterator<char>(fop), istreambuf_iterator<char>());
fop.close();//不适用文件一定要关闭它.

写入文件的操作

ofstream fop(filename, ios::binary);
const char* data = &file_content[0];
const size_t size = file_content.length(); //文件的尺寸使用size_t类型,保证不同系统上的兼容性.
fop.write(data,size);
fop.close();
猫哥
猫哥 项目组成员 2022-10-10
希望我的回答能对你有所帮助

有关标准输出cout
输出变量的地址时如果变量类型时字符型,那么不会直接输出地址,而是输出从这个内存地址开始的字符串数据知道遇到结束符停止.

char a[] = "abcde";
cout << &a[0] << endl;

虽然这里有&,好像它会输出字符的地址,但它其实输出的是abcde.

学习
记录

发布
问题

分享
好友

手机
浏览

扫码手机浏览