C语言
妖妖灵誓言
分享
展开
-
C语言长字符串拆分
一、说明C中字符串有时候会出现很长的情况,如果不换行书写查看起来很不方便。长字符串拆分成多行处理也是C规范的一部分。二、方法方法1. 利用双引号" " ,将长字符串分成多个子串换行,C会自动无缝拼接这些字符串。方法2. 利用斜杠 \ , \ 后的换行符会被C忽略,所以可以拆分字符串,但是下一行的空格会被计算在内,可能导致错误。三、例子int main(){ char s1[50] , s2[50]; int slen=0; slen = snprintf(s1, si原创 2022-02-01 23:09:02 · 4373 阅读 · 0 评论 -
C语言:位段
一、定义位段,C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域”( bit field) 。利用位段能够用较少的位数存储数据。二、注意在C语言中,位段的声明和结构(struct)类似,但它的成员是一个或多个位的字段,这些不同长度的字段实际储存在一个或多个整型变量中。在声明时,位段成员必须是整形或枚举类型(通常是无符号类型),且在成员名的后面是一个冒号和一个整数,整数规定了成员所占用的位数。位域不能是静态类型。不能使用&对位域做取地址运算,原创 2021-11-29 22:38:45 · 959 阅读 · 0 评论 -
代码查错手段
1. 死循环死循环一定会占满CPU,可以通过查看cpu占用来判断是否有死循环。2. 函数出错,检查方式(1)先检查输入是否正确,参数格式,输入内容。(2)查看对应错误码。(3)确定具体报错位置,定位错误。...原创 2021-10-31 16:41:12 · 908 阅读 · 0 评论 -
likely与unlikely
一、介绍likely() 与 unlikely()是内核中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)__builtin_expect是gcc(版本>=2.96,网上写的,我没验证过)中提供的一个预处理命令(这个名词也是网上写的,我想叫函数更好些),有利于代码优化。gcc(原创 2021-10-31 16:33:54 · 371 阅读 · 0 评论 -
c语言性能优化
结构体对齐结构体中尽量保持偶数字节对齐(2,4,8),这样在cpu缓存读取时可减少读取次数,加快速度。原创 2021-10-31 14:58:55 · 246 阅读 · 0 评论 -
c语言的 宏
一、常规宏定义在 C 语言中,可以采用命令 #define 来定义宏。该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句。在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉。#define PI 3.1415926#define ARRAY_SIZE 100#define TITLE "*** Examples of Macros Without Parameters ***"#define BUFFER_SIZE (4 * 512)#def原创 2021-10-31 14:52:02 · 4353 阅读 · 0 评论 -
char, signed char, unsigned char
1. 区别(1) ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char(2)char相当于signed char或者unsigned char,但是这取决于编译器(3)这三种字符类型都是按照1个字节存储的,可以保存256个不同的值(4) signed char取值范围是 -128 到 127(5) unsigned char 取值范围是 0 到 2552. 等价(1)uint_8 等价于 unsigned char,存储大小都是一个字节,表示范围原创 2021-10-31 14:24:34 · 627 阅读 · 0 评论 -
原码-反码-补码转换
计算机内部使用补码表示二进制数1. 正数的补码=反码=原码2. 负数由原码求补码注意符号位始终保持不变。若已知 负数 -8,则其:原码为:1000 1000,(1为符号位,为1代表负数,为0代表正数)反码为:1111 0111,(符号位保持不变,其他位置按位取反)补码为:1111 1000,(反码 + 1)即在计算机中 用 1111 1000表示 -83. 负数由补码求原码(1)方法1:求负数 原码--->补码 的逆过程。 注意:符号位保持不变!原创 2021-10-31 14:11:58 · 1488 阅读 · 0 评论 -
C语言常见错误
C语言常犯的错误1. 申请内存后必须加错误检查。申请内存三步:malloc->判断是否申请成功->memset赋值->使用->释放。2. 对函数参数要检查。3. 关键部分要加注释,注释风格要统一。4. 统一编码规范(for/switch等缩进,空格, 注释)。5. 定义debug开关,使用宏统一进行错误处理(FILE、LINE、func)。6. 通常返回值:0表示成功,其他值表示失败。7. 发现了在ip和端口计算中的字节序问题,在处理时要统一字节序。8. 在进行位运原创 2021-10-11 23:51:26 · 499 阅读 · 0 评论 -
c语言常用初始化函数(字符串、结构体):memset()
memset()<string.h>函数原型:void *memset(void *str, int c, size_t n);复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符返回值:该值返回一个指向存储区 str 的指针。参数(1)str – 指向要填充的内存块。(2)c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。(3)n – 要被设置为该值的字符数。#include <stdio.h&原创 2021-10-11 23:44:04 · 1905 阅读 · 0 评论 -
c语言:拷贝内存函数memcpy()
一、memcpy()<string.h>函数原型:void *memcpy(void *str1, const void *str2, size_t n) ;从存储区 str2 复制 n 个字节到存储区 str1;返回值:该函数返回一个指向目标存储区 str1 的指针;// 将字符串复制到数组 dest 中#include <stdio.h>#include <string.h> int main (){ const char src[50]原创 2021-10-11 23:39:36 · 3519 阅读 · 0 评论 -
c语言:拷贝字符串
一、strcpy():容易溢出头文件:#include <string.h>strcpy() 函数用来复制字符串;其原型为:char *strcpy(char *dest, const char *src);strcpy()是依据 \0 作为结束判断的;通常,我们的 from 都来源于用户的输入,很可能是非常大的一个字符串,因此 strcpy 不够安全;(1)【参数】dest 为目标字符串指针,src 为源字符串指针;(2)注意:src 和 dest 所指的内存区域不能重叠,且d原创 2021-10-11 23:31:46 · 6268 阅读 · 0 评论 -
C语言条件编译
参考链接:https://blog.csdn.net/qq_24990383/article/details/81706127一、 预处理C程序的编译预处理用于把每一条C语句用若干条机器指令来实现,生成目标程序。由于#define等编译预处理指令不是C语句,不能被编译程序翻译,需要在真正编译之前作一个预处理,解释完成编译预处理指令,从而把预处理指令转换成相应的C程序段,最终成为由纯粹C语句构成的程序,经编译最后得到目标代码。C语言的编译预处理处理功能主要包括文件包含(#include)、宏定义(#d原创 2021-09-19 00:36:42 · 523 阅读 · 0 评论