C/C++的常用库及库函数学习了解
在这主要介绍的是C/C++下一些基本库的了解学习及库下一些基本函数的解释和Demo展示。
首先来看几个问题:
1. #include <>和#include“”的区别:
<>:引用的是编辑器的类库路径里面的头文件
“”:引用的是个人程序目录下的相对路径中的头文件
2.C和C++对头文件的引用有什么区别:
C:#include<stdio.h>
C++: #include <iostream>
对C:
#include<stdio.h>:定义基本输入/输出函数
#include<string.h>:定义字符串处理函数
#include<float.h>:定义浮点数处理函数
#include<stdlib.h>:定义杂项函数及内存分配处理函数
#include<math.h>:定义基本数学处理函数
#include<ctype.h>:定义对字符的处理函数
对C++:
#include<iostream>:数据流输入输出
#include<cstdio>:输入输出函数
#include <cstring>:字符串处理
#include <cfloat>:浮点数处理
#include<cstdlib>:杂项函数及内存分配函数
#include <cmath>:数学函数
#include <cctype>:字符处理
stdio.h
文件访问:
·fopen打开文件
·fclose 关闭文件
其中需要注意的有:
1/如果文件成功打开的话,fb!=null,如果文件成功关闭的话,返回的int型数i==0
2/fopen的第一个参数是需要打开的文件名,第二个参数是以什么方式打开,含有方式有:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 含义
────────────────────────────
"r" 打开文字文件只读
"w" 创建文字文件只写
"a" 增补,如果文件不存在则创建一个
"r+" 打开一个文字文件读/写
"w+" 创建一个文字文件读/写
"a+" 打开或创建一个文件增补
"b" 二进制文件(可以和上面每一项合用)
"t" 文这文件(默认项)
Demo :
#iclude<stdio.h>
int main(){
FILE *fp; /*定义一个文件指针*/
int i;
fp=fopen("test.txt", "rb"); /*打开当前目录名为CLIB的文件只读*/
if(fp==NULL) /*判断文件是否打开成功*/
puts("File open error");/*提示打开不成功*/
i=fclose(fp); /*关闭打开的文件*/
if(i==0) /*判断文件是否关闭成功*/
printf("Close OK"); /*提示关闭成功*/
else
puts("File close error");/*提示关闭不成功*/
return 0;
}
·fprintf():文件的顺序写函数,返回数是实际写入文件中的字节数,错误时返回负数
·fputs():文件的顺序写函数,函数返回0时表明将string指针所指的字符串写入文件中的操作成功,返回非0时, 表明写操作失败。
·fputc():文件的顺序写函数,返回一个向文件所写字符的值,此时写操作成功, 否则返回EOF(其值为-1,在stdio.h中定义)表示写操作错误。
Demo :
<span style="color:#000000;">#include<stdio.h>
int main(){
char *s="That's good news"; /*定义字符串指针并初始化*/
int i=250; /*定义整型变量并初始化*/
FILE *fp; /*定义文件指针*/
fp=fopne("test.dat", "w"); /*建立一个文字文件只写*/
fputs("Your score of TOEFLis", fp);/*向所建文件写入一串字符*/
fputc(':', fp); /*向所建文件写冒号:*/
fprintf(fp, "%d/n", i); /*向所建文件写一整型数*/
fprintf(fp, "%s", s); /*向所建文件写一字符串*/
fclose(fp); /*关闭文件*/
return 0;
}</span>
·fscanf():顺序读操作函数,返回值为EOF(即-1),表明读错误,否则读数据成功。
·fgets():顺序读操作函数,从文件中读取至多n-1个字符(n用来指定字符数),并把它们放入string指向的字符串中,在读入之后自动向字符串未尾加一个空字符,读成功返回string指针,失败返回一个空指针。
·fgetc():顺序读操作函数,返回文件当前位置的一个字符, 读错误时返回EOF。
Demo:
<span style="font-size:18px;">#include<stdio.h>
int main(){
char *s, m[20];
int i;
FILE *fp;
fp=fopen("test.dat", "r"); /*打开文字文件只读*/
fgets(s, 24, fp); /*从文件中读取23个字符*/
printf("%s", s); /*输出所读的字符串*/
fscanf(fp, "%d", &i); /*读取整型数*/
printf("%d", i); /*输出所读整型数*/
putchar(fgetc(fp)); /*读取一个字符同时输出*/
fgets(m, 17, fp); /*读取16个字符*/
puts(m); /*输出所读字符串*/
fclose(fp); /*关闭文件*/
getch(); /*等待任一键*/
return 0;
}</span>
·printf():格式化输出函数
输出格式总结:
1)类型
类型字符用以表示输出数据的类型,其格式符和意义如下表所示:
格式字符 | 意义 |
d | 以十进制形式输出带符号整数(正数不输出符号) |
o | 以八进制形式输出无符号整数(不输出前缀0) |
x,X | 以十六进制形式输出无符号整数(不输出前缀Ox) |
u | 以十进制形式输出无符号整数 |
f | 以小数形式输出单、双精度实数 |
e,E | 以指数形式输出单、双精度实数 |
g,G | 以%f或%e中较短的输出宽度输出单、双精度实数 |
c | 输出单个字符 |
s | 输出字符串 |
2)标志
标志字符为-、+、#和空格四种,其意义下表所示:
标志 | 意义 |
- | 结果左对齐,右边填空格 |
+ | 输出符号(正号或负号) |
空格 | 输出值为正时冠以空格,为负时冠以负号 |
# | 对c、s、d、u类无影响; |
Demo:
<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
int main()
{
int i = 6;
float j = 2.0;
char k[20] = "Hello the world";
printf("From 百度百科");
printf("i=%d;j=%f", i, j);
printf("k=%c", k);
return 0;
}</span>
·sprintf():将格式化的数据写入到某个字符串
Demo:
<span style="font-size:18px;">#include<stdio.h>
int main()
{
int s;
sprintf(s, "%d", 123); //将"123"赋值给s
return 0;
}</span>
·strlen():统计字符串str中字符的个数(不包括终止符’\0’)
Demo:
#include
#include
int main(){
char *str="how are you!";
int aa;
aa = strlen(str);
printf("the lence is:%d\n",aa); //结果是12
return 0;
}
·strcpy():拷贝函数,拷贝一个字符串到另外一个
Demo:
#include <stdio.h>
#include <string.h>
int main(){
char string[10];
char *str1 = "abcdefghi";
strcpy(string, str1); //将str1的值赋给string
printf("%s\n", string);
return 0;
}
·strcat():字符串拼接函数,(取消掉str1后面的’\0’实现拼接)
Demo:
#include <string.h>
#include <stdio.h>
int main(){
char destination[25];
char *Sa = "This", *Sb = "is", *Sc = "a words";
strcpy(destination, Sa);
strcat(destination, Sb);
strcat(destination, Sc);
printf("%s\n", destination); //destination的内容便是This is a worlds
return 0;
}
·strchr() :在一段字符串中查找给定字符的第一个匹配之处,其返回的值需要查找的字符在字符串的位置( %d 类型)
·strcmp():字符串比较,intstrcmp(char *str1, char *str2);返回值是str1的Asic值减去str2的Asic值,如果是字符串,则是所有字符的Asic总和相减;两串相等,返回0。
如果忽略大小写:strncmpi();stricmp();strcmpi();
Demo:
#include <string.h>
#include <stdio.h>
int main(){
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
int ptr;
ptr = strcmp(buf2, buf1);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
else
printf("buffer 2 is less than buffer 1\n");
ptr = strcmp(buf2, buf3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 3\n");
else
printf("buffer 2 is less than buffer 3\n");
return 0;
}
·strrev():实现串倒转
·strupr():大小写转换之小写转大写
注:实际实现过程中发现string.h未对strupr()定义
Demo:
#include <string.h>
#include <stdio.h>
int main()
{
char *string="abcdefghijklmnopqrstuvwxyz";
char *ptr;
ptr=strupr(string);
printf("%s",ptr);
return 0;
}
·strlwr():大小写转换之大写转小写
注:实际实现过程中发现string.h未对strlwr()定义
Demo:
#include <string.h>
#include <stdio.h>
int main()
{
char str[]="HOW TO SAY?";
printf("%s",strlwr(str));
return 0;
}
·memcpy():字符串拷贝
注:与strcpy()的区别在于,strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
Demo:
#include <string.h>
#include <stdio.h>
int main()
{
char srcm[]="******************************";
char destm[]="abcdefghijlkmnopqrstuvwxyz0123456709";
char *ptrm = new char[strlen(srcm)+1];
memcpy(ptrm,srcm,(strlen(srcm)+1));
if (ptrm)
printf("destination after memcpy:%s\n",ptrm);
else
printf("memcpy failed");
delete []ptrm;
return 0;
}
·memset():函数原型: void *memset(void *s, int c, size_t n); 将字符串中的前n个字节内容设置为c。
Demo:
#include <string.h>
#include <stdio.h>
int main()
{
char buffers[]="Hello world";
printf("Buffer before memset:%s\n",buffers);
memset(buffers,'*',4);
printf("Buffer after memset:%s\n",buffers);//结果输出:****o world
return 0;
}
·memmove():字符串拷贝。
原型:void*memmove( void* dest, const void* src, size_t count );
将src中的count中字符串覆盖dest中。
stdlib.h
·malloc():分配指定字节数的内存,并返回该内存的指针。·calloc():在内存的动态存储区中分配指定长度的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。·rand():生成0~RAND_MAX之间的一个随机数,其中RAND_MAX是stdlib.h中定义的一个整数,它与系统有关。注:srand和rand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。
·srand():srand函数是随机数发生器的初始化函数。
注:如果不配合此函数使用每次重新执行函数的时候生成的随机数不变。
·free():释放内存空间函数。
free(void*ptr);释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。
·abort():异常终止一个进程,无返回值。