随笔分类 - C语言
摘要:位域简介 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,可以在程序中按域名进行操作。 这样就可以把几个不同的对...
阅读全文
摘要:strtok简介 下面的说明摘自于最新的Linux内核2.6.29,说明了strtok()这个函数已经不再使用,由速度更快的strsep()代替。 函数说明 char *strtok(char s[], const char *delim); strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当str...
阅读全文
摘要:strtol简介 long int strtol(const char *nptr, char **endptr, int base) strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。 参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。 可以被转换的合法字符依据base而定,举例来说,当b...
阅读全文
摘要:#define offsetof(s,m) (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))该宏用于求结构体中一个成员在该结构体中的偏移量。第一个参数是结构体的名字,第二个参数是结构体成员的名字。该宏返回结构体structName s中成员memberName(m)的偏移量。偏移量是size_t类型的。offsetof returns the offset in bytes of the specified member from the beginning of its parent
阅读全文
摘要:typedef long time_t; 表达时间(秒数)size_t是标准C库中定义的,32位中为unsigned int,在64位系统中为 long unsigned int,用于指明数组长度或下标,它必须是一个正数,设计size_t就是为了适应多个平台,其引入增强了程序在不同平台上的可移植性。ptrdiff_t是long int类型,用于存放同一数组中两个指针之间的差距,它可以使负数,使用ptrdiff_t来得到独立于平台的地址差值.size_type是unsigned类型,表示容器中元素长度或者下标,vector<int>::size_type i;difference_t
阅读全文
摘要:ptrdiff_t简介 ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型。ptrdiff_t类型变量通常用来保存两个指针减法操作的结果。ptrdiff_t定义在stddef.h(cstddef)这个文件内。ptrdiff_t通常被定义为long int类型。 ptrdiff_t定义在C99标准中。 #include <stdio.h> #inclu...
阅读全文
摘要:C语言的readlink read value of a symbolic link。 ssize_t readlink(const char *path, char *buf, size_t bufsiz); readlink() places the contents of the symbolic link path in the buffer buf, which ...
阅读全文
摘要:1、void perror(const char *s); perror ("open_port"); #include <stdio.h> perror ( )用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量error的值来决定要输出的字符串。 2、char * strerr...
阅读全文
摘要:exec函数族 说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是: #include <unistd.h> extern char **environ; int execl(const char *path, const char *arg, ...); in...
阅读全文
摘要:在C语言中执行shell命令 1、system系统调用 int system(const char * string); system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQ...
阅读全文
摘要:C语言中格式化日期时间ctime()函数 函数原型:char *ctime(const time_t *time); 功能说明:将time_t类型日期和时间转换为字符串。 返回值:返回由tm结构中的日期和时间转换成的字符串的地址,该字符串的形式定义如下: DDD MMM dd hh:mm:ss YYYY 各字符的意义: D...
阅读全文
摘要:关于堆及内存分配点滴 1. 无论是堆,还是栈都是对虚存的操作和管理。 2. 系统调用brk()和mmap()用来动态分配虚存空间,也就是表明这些虚存地址是合法的,访问的时候,系统应为其分配物理内存,而不是报错。 3. 堆的本质是动态申请的虚存空间。理论上可以用任何方式去管理这块空间。但数据结构--"堆"是最常用的一种,所以这块分配的空间常称为被堆。 4. 和栈不一样,堆的管理是在用户...
阅读全文
摘要:int转换成float 1、取整数部分,计算机计算的时候有浮点协处理器,硬件可以转,如果没有浮点协处理器那就要软件模拟。[1] 2、C语言中,不管表达式的值怎样,系统都自动将其转为赋值运算符左部变量的类型。[2] 3、由int转为float时会存在精度丢失的情况,因为int的有效为31位,而float小数有效位为23位。double形小数有效位为52位,所以平时int转成浮...
阅读全文
摘要:1、符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1;对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0。 比如一个用一个8位二进制表示-1,则是10000001 如果把这个书用16位二进制表示时,则为11111111 10000001 高位全都是1,这个叫做符...
阅读全文
摘要:iconv_open函数 iconv_open——申请一个字符集转换的描述符 #include <iconv.h> iconv_t iconv_open(const char* tocode,const char* fromcode) 描述: iconv_open()函数申请一个转换描述符,转换字符序列从编码fromcode到编码tocode 转换描述符包...
阅读全文
摘要:1.定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。 返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。 ...
阅读全文
摘要:为什么需要字节对齐? 计算机组成原理教导我们这样有助于加快计算机的取数速度,否则就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本数据类型(int等)都位于能被4整除的地址上,以此类推。这样,两个数中间就可能需要加入填充字节,所以整个结构体的sizeof值就增长了...
阅读全文
摘要:其实理解 sizeof 只需要抓住一个要点:栈 程序存储分布有三个区域:栈、静态和动态。能够从代码直接操作的对象,包括任何类型的变量、指针,都是在栈上的;动态和静态存储区是靠栈上的指针来间接操作的。sizeof 操作符,计算的是对象在栈上的投影体积;记住这个就很多东西都很清楚了。 char const * static_string = "Hello"; sizeof(st...
阅读全文
摘要:1.strlen()用来计算指定的字符串s的长度,不包括结束字符'\0'。strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值,在程序运行时计算。 原文: http://baike.baidu.com/view/736226.htm 2.s...
阅读全文
摘要:sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。 sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险 。这个安全版本的原型是: int spr...
阅读全文

浙公网安备 33010602011771号