网站底部源码,上海工程网站建设,找客户的十大方法,定制建网站❤个人主页#xff1a;折枝寄北的博客 ❤专栏位置#xff1a;简单入手C语言专栏 目录 前言1. 错误信息报告1.1 strerror 2. 字符操作2.1 字符分类函数2.2 字符转换函数 3. 内存操作函数3.1 memcpy3.2 memmove3.2memset3.3 memcmp 感谢您的阅读 前言
当你写下strcpy(dest, s… ❤个人主页折枝寄北的博客 ❤专栏位置简单入手C语言专栏 目录 前言1. 错误信息报告1.1 strerror 2. 字符操作2.1 字符分类函数2.2 字符转换函数 3. 内存操作函数3.1 memcpy3.2 memmove3.2memset3.3 memcmp 感谢您的阅读 前言
当你写下strcpy(dest, src)这行看似无害的代码时是否意识到自己正在操作系统的血管里进行一场没有安全绳的高空走钢丝在C语言的世界里字符串从来都不是温顺的数据羔羊而是戴着可爱面具的内存刺客——那些优雅的str开头的函数库既是程序员最亲密的工具也是引发段错误Segmentation Fault的经典元凶。
1. 错误信息报告
1.1 strerror
标准格式 char * strerror ( int errnum ); 功能 获得指向错误信息的地址 C语言的库函数在运行的时候如果发生错误就会将错误存在一个变量中这个全局变量是errno 错误码是一些数字1245。。。 我们需要将错误码翻译成错误信息 代码示例部分 示例一
#include stdio.h
#include string.h
#include errno.h//必须包含的头文件
int main ()
{FILE * pFile;pFile fopen (unexist.ent,r);if (pFile NULL)printf (Error opening file unexist.ent: %s\n,strerror(errno));//errno: Last error numberreturn 0;
}示例二
int main()
{printf(%s\n, strerror(0));printf(%s\n, strerror(1));printf(%s\n, strerror(2));printf(%s\n, strerror(3));printf(%s\n, strerror(4));printf(%s\n, strerror(5));return 0;
}#includeerrno.h
int main()
{//打开文件FILE* pf fopen(test.txt, r);if (pf NULL){printf(%s\n,strerror(errno));//perror 打印错误信息//在打印错误信息前会先打印自定义的信息perror(fopen);//printf(文件打开失败\n);return 1;}else{printf(文件打开成功\n);}//关闭文件fclose(pf);return 0;//如果文件打开成功会返回一个有效的指针//打开失败返回一个NULL指针
}2. 字符操作
简单列举出部分字符操作函数供大家自行学习。全写出来篇幅过长不易阅读
2.1 字符分类函数 函数 --------如果他的参数符合下列条件就返回真 1.iscntrl----- 任何控制字符 2.isspace -----空白字符空格‘ ’换页‘\f’换行’\n’回车‘\r’制表符’\t’或者垂直制表符’\v’ 3.isdigit---- 十进制数字 0~9 4.isxdigit ----十六进制数字包括所有十进制数字小写字母a-f大写字母A~F 5.islower---- 小写字母a~z 6.isupper ----大写字母A~Z 7.isalpha ----字母a-z或A~Z 8.isalnum ----字母或者数字a-z,A-Z,0~9 9.ispunct ----标点符号任何不属于数字或者字母的图形字符可打印 10.isgraph ----任何图形字符 11.isprint ----任何可打印字符包括图形字符和空白字符 2.2 字符转换函数 int tolower ( int c ); int toupper ( int c ); 代码示例
字符转换
eg:I Have Apple.
int main()
{char arr[] I Have Apple.;int i 0;while (arr[i]){if (isupper(arr[i])){arr[i] tolower(arr[i]);}printf(%c, arr[i]);i;}return 0;
}3. 内存操作函数
3.1 memcpy
标准格式 void * memcpy ( void * destination, const void * source, size_t num ); 功能 strcpy只能拷贝字符串 memcpy可以拷贝其他类型的数据 注意
函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。这个函数在遇到 ‘\0’ 的时候并不会停下来。如果source和destination有任何的重叠复制的结果都是未定义的。 代码示例部分
#include stdio.h
#include string.h
struct{char name[40];int age;
} person, person_copy;
int main ()
{char myname[] Pierre de Fermat;/* using memcpy to copy string: */memcpy ( person.name, myname, strlen(myname)1 );person.age 46;/* using memcpy to copy structure: */memcpy ( person_copy, person, sizeof(person) );printf (person_copy: %s, %d \n, person_copy.name, person_copy.age );return 0;
}3.2 memmove
标准格式 void * memmove ( void* destination, const void * source, size_t num ); 功能及注意 1.和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。 2.如果源空间和目标空间出现重叠就得使用memmove函数处理。 代码示例部分
include stdio.h
#include string.h
int main ()
{char str[] memmove can be very useful......;memmove (str20,str15,11);puts (str);return 0;
}3.2memset
功能 以字节为单位来设置内存中的数据 代码示例部分
int main()
{char arr[] hello world;memset(arr, x, 5);printf(%s\n, arr);memset(arr6, y, 5);printf(%s\n, arr);return 0;
}3.3 memcmp
标准格式 int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 功能 比较从ptr1和ptr2指针开始的num个字节 代码示例部分
#include stdio.h
#include string.h
int main ()
{char buffer1[] DWgaOtP12df0;char buffer2[] DWGAOTP12DF0;int n;nmemcmp ( buffer1, buffer2, sizeof(buffer1) );if (n0) printf (%s is greater than %s.\n,buffer1,buffer2);else if (n0) printf (%s is less than %s.\n,buffer1,buffer2);else printf (%s is the same as %s.\n,buffer1,buffer2);return 0;
}感谢您的阅读