C语言杂记(仅供自我记录)-C库函数
- rand()随机函数
使用rand()和srand()产生指定范围内的随机整数的方法
“模除+加法”的方法
因为,对于任意数,0<=rand()%(n-m+1)<=n-m
因此,0+m<=rand()%(n-m+1)+m<=n-m+m
因此,如要产生[m,n]范围内的随机数num,可用:
int num=rand()%(n-m+1)+m;
其中的rand()%(n-m+1)+m算是一个公式,记录一下方便以后查阅。
比如产生10~30的随机整数:
srand((int)time(0));
int a = rand() % (21)+10; - malloc()函数
void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。void指的是类型申明
参数
size – 内存块的大小,以字节为单位。
返回值
该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。 - realloc()函数
void *realloc(void *ptr, size_t size) 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
参数
指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针。
返回值
该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL。 - strlen()函数
size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
参数
str – 要计算长度的字符串。
返回值
该函数返回字符串的长度。 - while()函数
格式
while (表达式)
{
语句;
}
当表达式为真,则执行下面的语句;语句执行完之后再判断表达式是否为真,如果为真,再次执行下面的语句;然后再判断表达式是否为真……就这样一直循环下去,直到表达式为假,跳出循环。这个就是 while 的执行顺序。
-fopen()函数
FILE *fopen(const char *filename, const char *mode) 使用给定的模式 mode 打开 filename 所指向的文件。
参数
filename – 这是 C 字符串,包含了要打开的文件名称。
mode – 这是 C 字符串,包含了文件访问模式,模式如下
返回值
该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。 - strerror()
char *strerror(int errnum) 从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。strerror 生成的错误字符串取决于开发平台和编译器。
参数
errnum – 错误号,通常是 errno
返回值
该函数返回一个指向错误字符串的指针,该错误字符串描述了错误 errnum。 - atoi()函数
int atoi(const char *nptr)
把字符串转换成整型数的一个函数,函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0
特别注意
该函数要求被转换的字符串是按十进制数理解的 - strtod()函数
double strtod(const char *str, char *endptr)
把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。如果 endptr 不为空,则指向转换中最后一个字符后的字符的指针会存储在 endptr 引用的位置。
参数
str – 要转换为双精度浮点数的字符串。
endptr – 对类型为 char 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。
返回值
该函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。 - free()
void free(void *ptr) 释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
参数
ptr – 指针指向一个要释放内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果传递的参数是一个空指针,则不会执行任何动作。
返回值
该函数不返回任何值。 - c_str()函数
返回当前字符串的首字符地址,当需要打开一个由用户自己输入文件名的文件时,可以这样写:ifstream in(st.c_str())。
返回值
const char*指针,指向以空字符终止的数组。
c_str()返回的是一个临时指针,不能对其进行操作 - ofstream和ifstream详细用法
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间。C++有一个stream这个类,所有的I/O都以这个“流”类为基础的。
stream这个类有两个重要的运算符:
1、插入器(<<)
向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<“Write Stdout”<<’\n’;就表示把字符串"Write Stdout"和换行字符(’\n’)输出到标准输出流。
2、析取器(>>)
从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型的数据。
在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。
详见添加链接描述 - getline()函数,用来读入一行数据。它使用通过回车键输入的换行符来确定输入结尾。
参数(两个):getline(char *p, int n, char c)
第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数量。如果参数是20,那么最多可以读取19个字符,余下的空间用于存储自动在结尾处添加的空字符。如果在读取n-1个字符之前遇到终止字符(第三个参数不写,默认为’\n’),则提前结束。getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。