五,错误信息报告
1, strerror
c语言的库函数在执行失败时,都会有一个错误码( 0,1,2,3,4,5,6,7,8,9......)
返回错误码,所对应的错误信息
errno 是一个全局的错误码变量
当c语言的库函数在执行过程中,发生了错误,就会把对应的错误码,复制到errno中
strerror代码演示:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<errno.h> int main() { printf("%s\n", strerror(0)); printf("%s\n", strerror(1)); printf("%s\n", strerror(2)); printf("%s\n", strerror(3)); return 0;
六,字符操作
字符分类函数:
函数 | 如果他的参数符合下列条件就返回真 |
iscntrl | 任何控制字符 |
isspace | 空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v' |
isdigit | 十进制数字 0~9 |
isxdigit | 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F |
islower | 小写字母a~z |
isupper | 大写字母A~Z |
isalpha | 字母a~z或者A~Z |
isalnum | 字母或者数字,a~z,A~Z,0~9 |
ispunct | 标点符号,任何不属于数字或者字母的图形字符(可打印) |
i's'isgraph | 任何图形字符 |
isprint | 然后可打印字符,包括图形字符和空白字符 |
字符转换:
int tolower ( int c );
int toupper ( int c );
七,内存操作函数
1,memcpy
void * memcpy ( void * destination, const void * source, size_t num );
函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置
这个函数在遇到 '\0' 的时候并不会停下来
如果source和destination有任何的重叠,复制的结果都是未定义的
memcpy函数模拟实现:
void* my_memcpy(void* dest, const void* src, size_t num) { while (num--) { *(char*)dest = *(char*)src; (char*)dest += 1; (char*)src += 1; } } int main() { char arr[] = "abcde"; char arr1[] = "gjk"; my_memcpy(arr, arr1, sizeof(arr1[0]) * 2); printf("%s", arr); }
2,memmove
void * memmove ( void * destination, const void * source, size_t num )
和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的
如果源空间和目标空间出现重叠,就得使用memmove函数处理
memmove函数模拟实现:
void* my_memmove(void* dest, const void* src, size_t num) { if (dest <= src) { while (num--) { *(char*)dest = *(char*)src; (char*)dest += 1; (char*)src += 1; } } else { while (num--) { *((char*)dest+num) = *((char*)src+num); } } } int main() { int arr[] = { 1,2,3,4,5,6,7,8 }; my_memmove(arr + 3, arr + 2, sizeof(arr[0]) * 3); int i = 0; for (i = 0; i < 8; i++) { printf("%d ", arr[i]); } return 0; }
3,memset
void* memset ( void* dest , int c , size_t num );
memset是一个初始化函数,作用是将某一块内存中的全部设定为指定的值
memset代码示例:
#include<stdio.h> int main() { char arr[] = "abcde"; memset(arr + 1, '#', sizeof(arr[0]) * 3); printf("%s", arr); return 0; }
4,memcmp
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
比较从ptr1和ptr2指针开始的num个字节
返回值如下:
memcmp代码示例:
#include<stdio.h> int main() { char arr[] = "abcdef"; char brr[] = "abcghj"; int ret = memcmp(arr, brr, sizeof(arr[0]) * 3); printf("%d\n", ret); ret=memcmp(arr, brr, sizeof(arr[0]) * 4); printf("%d", ret); return 0; }