目录
perror首先把错误码转化为错误信息,然后打印错误信息,错误信息中包含了自定义的信息。
二、字符分类函数
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'
isdigit 十进制数字 0~9
islower a~z
isupper A~Z
isalpha 字母a~z或A~Z
等等
三、字符转换函数
//int main()
//{
// char arr[20] = { 0 };
// scanf("%s\n", arr);
// int i = 0;
// while (arr[i] != '\0')
// {
// if (isupper(arr[i]))
// {
// arr[i] = tolower(arr[i]);
//
// }
// printf("%c ", arr[i]);
// i++;
// }
// return 0;
//}
四、内存函数
由于strcpy不能完成内存块的拷贝,当strcpy拷贝01时,遇到了0,不会往下接着拷贝,所以出现了内存函数
memcpy
内存拷贝 拷贝内存不重叠的部分,只要实现不重叠拷贝就行了,而VS中的实现即可以考虑不重叠,也可以拷贝重叠内存
size_t 无符号正数,
int 有符号数
memmove
可以拷贝内存重叠的情况
模拟实现memmove
1.辅助理解图
2.代码
#include<ctype.h>
#include<assert.h>
#define _CRT_SECURE_NO_WARNINGS 1
void* memmove_1(void* dest, void* scr, int count)
{
assert(dest && scr);
void* ret = dest;
if (dest > scr)
{
//从后往前拷贝
while (count--)
{
*((char*)dest + count) = *((char*)scr + count);
}
}
else
{
//从前往后拷贝
int i = 0;
while (count--)
{
*((char*)dest + i) = *((char*)scr + i);
i++;
}
}
return ret;
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
memmove_1(arr + 2, arr, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
3.辅助理解
这里是一个一个字节拷贝
1,2,3,4,5在内存中的小端存储
memcmp
memcmp 内存比较,返回值跟strcmp一样,相同返回0
memset
内存设置
将arr前20个字节设置为1
调试窗口查看下