C
很久以后的一次重新学习
3000bookworm
学,嘎嘎学
展开
-
静态方法 static foo()
而在Python 3中,如果一个类的方法不需要self参数,不再需要声明为静态方法,但是这样的话只能通过类去调用这个方法,如果使用实例调用这个方法会引发异常。但通常建议通过类名来使用静态方法,因为静态方法只要定义了类,不必建立类的实例就可使用。在处理大量功能模块和多个代码文件时,静态方法能够组织不同的方法为一个单独的类,避免在不同程序文件中查找函数的麻烦。总之,静态方法因其独特的特性和优势,在编程中扮演着重要的角色,特别是在提高代码效率、可维护性和复用性方面。这些方法属于类本身,而不是类的某个具体对象。原创 2024-03-21 20:23:27 · 324 阅读 · 0 评论 -
更安全的C gets()和str* 以及fgets和strcspn的用法
可以说全是错误首先char *str没有指向一个分配好的地址,就直接读入,危险ps:怎么理解是将一个存储在一个只读的数据段中字符串常量的首地址赋值给了尝试从标准输入读取一个字符串并存储在str指向的位置。但是,由于str没有被初始化为指向有效的内存,gets函数可能会尝试写入一个随机的内存地址,这会导致程序崩溃或更糟糕的后果。puts(str);试图打印从gets读取的字符串。但是,由于gets可能导致未定义行为,str指向的内容可能是不确定的,所以puts的行为也是不确定的。更糟糕的是,原创 2024-03-16 22:59:16 · 580 阅读 · 0 评论 -
标准C库函数之perror()、strerror(),以及他们之间各种的优缺点(打印错误信息)
如果你需要处理错误消息,例如将其发送到特定的日志系统,或者创建定制的错误消息,那么strerror可能是更好的选择。总体而言,strerror函数和strerror_r函数用于获取描述错误的字符串,而perror函数用于报告错误消息。与strerror函数不同,GNU版本的strerror_r并不返回静态分配的字符串,而是将错误消息复制到提供的缓冲区中,并返回指向缓冲区的指针。在输出错误消息时,这个字符串将作为错误消息的前缀(也就是说,你可以手动的去描述这个错误是怎么发生的)。原创 2024-03-06 20:15:08 · 927 阅读 · 0 评论 -
文件的操作
【代码】文件的操作。原创 2024-03-06 19:17:41 · 361 阅读 · 0 评论 -
函数指针 以及数据类型size_t(最大非负数)
size_t是无符号的长整型,其位宽不小于 16位,一般用来表示字节数的多少。常用于如sizeof返回值的类型。与int类型相比,主要的特点为:size_t是无符号的,int是有符号的。size_t是一种跟具体的平台有关联的类型,会具体调整其能表示的范围,因此其可移植性会更好。size_t能保证可以存储任何类型理论上可能的对象的最大值,包括数组类型。而int类型则只能保证16位或 32位的长度,且int为有符号的类型,其能存储的范围就更小了。原创 2024-03-05 23:38:03 · 394 阅读 · 0 评论 -
typedef
b1, b3都是int。typedef还是吊啊。原创 2024-03-05 14:41:55 · 331 阅读 · 0 评论 -
C语言中的宏函数与宏定义
C语言中的宏函数与宏定义从开始写C语言到生成执行程序的流程大致如下:预处理工作是系统引用预处理程序对源程序中的预处理部分做处理,而预处理部分是指以“#”开头的、放在函数之外的、一般放在源文件的前面的预处理命令,如:包括命令 #include,宏命令 #define 等,合理地利用预处理功能可以使得程序更加方便地阅读、修改、移植、调试等,也有利于模块化程序设计。宏定义是比较常用的预处理指令,即使用“标识符”来表示“替换列表”中的内容。标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替原创 2024-03-04 22:53:37 · 2941 阅读 · 0 评论 -
static 存储类
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。实例中 count 作为全局变量可以在函数内使用,thingy 使用 static 修饰后,不会在每次调用时重置。静态变量在程序中只被初始化一次,即使函数被调用多次,该变量的值也不会重置。原创 2024-03-03 18:36:07 · 377 阅读 · 0 评论 -
printf() 函数支持变长参数列表
printf() 函数也支持变长参数列表,可以使用省略号 …来表示,用于指定要输出的多个值。在函数内部,可以使用 va_start() 和 va_end() 宏来访问变长参数列表中的值。原创 2024-03-03 15:30:09 · 381 阅读 · 0 评论 -
visual studio安装时候修改共享组件、工具和SDK路径方法
安装了VsStudio后,如果自己修改了Shared路径,当卸载旧版本,需要安装新版本时发现,之前的Shared路径无法进行修改,这就很坑爹了,因为我运行flutter程序的时候,报错找不到windows sdk的位置,所以我就怀疑是我手动修改了安装路径导致的,我就想着卸载重装应该可以解决。但是却遇到了路径无法修改的问题…计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\Setup。原创 2024-03-03 14:05:18 · 1667 阅读 · 0 评论 -
虚拟内存与mmap,brk
给定虚拟地址0x03d4,其二进制表示为0b 00 0011 1101 0100,低6位0b 01 0100为VPO,因为四路组相联,所以第6-7位为TLBI(TLB索引),为0b 11,剩余为TLBT(TLB标记),TLBI表示TLB表的行号,找到TLBT为0x03的位置,得到PPN为0D。地址翻译时,给定虚拟地址,低p位表示页偏移,其中VPO=PPO,高n-p位表示虚拟页号,即PTE的索引号,找到对应PTE记录,得到物理页号PPN,跟PPO组合得到物理地址。即进程在写时,复制修改的部分到内存其他区域。原创 2024-03-02 18:22:36 · 991 阅读 · 0 评论 -
用sizeof和strlen计算数组或指针大小
👻创造一个由一串字符串组成的字符数组,字符串“abcdef”等价于’a’,‘b’,‘c’,‘d’,‘e’,‘f’,'\0’这七个单个字符的组合,数组内实际存放了7个元素。👻创造一个由一串字符串组成的字符数组,字符串“abcdef”等价于’a’,‘b’,‘c’,‘d’,‘e’,‘f’,'\0’这七个单个字符的组合,数组内实际存放了7个元素。👻创建一个指针变量,指向字符串的首元素(存放字符串首元素地址),字符串“abcdef”相当于’a’,‘b’,‘c’,‘d,’‘e’,‘f’,‘\0’原创 2024-03-02 17:01:57 · 1259 阅读 · 0 评论 -
【C语言】字符串函数+内存函数的总结与剖析
传参成功后,strcat会将原字符串的第一个字符覆盖到目标字符串的’\0’位置,后面再接着原字符串剩下的全部字符,直到遇见’\0’后结束,保证了拼接后的字符串只有一个结束标志’\0’。💭这里是因为发生了数组溢出,由于"cde"字符串加上’\0’有四个字符,而str1我们规定了长度为5,当"cde"拼接在str1后覆盖了它的’\0’之后,拼接字符串一共有六个字符,超过了目标字符串str1的长度,无法容纳拼接后的字符串,所以发生了错误。原创 2022-12-30 16:25:31 · 94 阅读 · 0 评论