字符串处理集的函数定义在<string.h>头文件中,该头文件定义了size_t类型和空指针NULL宏。该头文件提供了一些分析和操作字符串的函数,其中的一些函数以更通用的方式处理内存。本文一一介绍。1. 函数1.1 memchr &&strchr函数原型:void *memchr(const void *s, int c, size_t n);
void *me...
ANSI C标准库中包括了各种类型的实用工具函数,它们都在stdlib.h中定义,本文就介绍该头文件。1. 类型stdlib.h中定义了如下一些类型:
size_t :sizeof运算符返回的无符号整数类型
wchar_t :用来表示宽字符的整数类型
div_t :div( )函数返回的结构类型,它包含quot和rem两个成员,两个成员都为int类型
ldiv_t :ldiv...
如果你是在Linux环境下使用标准C的I/O,并且想了解一下标准I/O背后的细节,可以先看一下我的另外一篇文章《Linux文件I/O》。1. 类型ANSI C标准库包括了一些与流相关的标准I/O函数,这些函数都定义在<stdio.h>头文件中,同时,也定义了一些流相关的类型。本文一一介绍。1.1 FILE文件类型FILE是stdio.h中定义的一种派生类型,这个类型会记录一些打开...
select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在一个或多个事件发生或者经历一段指定的事件后唤醒它。而内核是根据描述字的状态来判断事件的发生的,也就是说,我们调用select告知内核对那些描述字(就读、写或异常条件)感兴趣以及等待多长时间。一般select函数多用于网络编程中,但其实我们感兴趣的套接字不局限于套接字描述字;任何描述字都可以使用select来测试。1. 函数介...
我们都知道socket函数执行成功时,返回一个可用的套接字描述符(套接字描述符实质上是一个无符号整数)。但每个进程维护一套套接字描述符还是每个线程维护一套呢?看下面的程序。1. 不同进程同时使用socket下面的代码socket_rst.c循环执行socket函数,申请套接字描述符。#include <stdio.h>
#include <stdlib.h>
#i...
首先说明一下,C/C++中不存在真正意义上的变长结构体。因为结构体在编译期就已经决定了其长度。如果需要实现变长,只能通过运行期分配内存来实现。1,使用指针实现变长结构体类似下面的代码应该非常常见:typedef struct st_type4
{
int cnt;
char *data;
} type_d;我们在结构体中定义了一个data字段,且该字段是一个char型的指针。因...
1 自定义可变参数的函数C语言中的<stdarg.h>中提供了可变参数的函数。使用步骤如下:
在函数原型中使用省略号,且省略号必须是最后一个参数
在函数定义中创建一个va_list类型的变量
用宏va_start将该变量初始化为一个参数列表
用宏va_arg访问参数列表
用宏va_end完成清理工作
下面进行详细说明。1 函数原型需要注意的是函数原型必须具有...
1,函数介绍在C中,我们知道可以使用goto实现程序的跳转。但是,goto语句是不能跨越函数的。如果想要跨函数跳转,那么我们就要使用setjmp和longjmp函数了。这两个函数对于处理发生在深层嵌套函数调用中的出错情况非常有用。这两个函数的函数原型如下:#include <setjmp.h>
int setjmp(jmp_buf env);
void longjmp(jmp...
- « 前一页
- 1
- 2
- 3
- 4
- 5
- 6
- 后一页 »