当前位置: 首页 > news >正文

无锡网站建设 首选无锡立威云商潍坊网站建设wfzhy

无锡网站建设 首选无锡立威云商,潍坊网站建设wfzhy,网站设计如何收费标准,22 wordpress 模板各位CSDN的uu们你们好呀#xff0c;今天小雅兰的内容依旧是字符函数和字符串函数呀#xff0c;这篇博客会讲一些内存相关的函数#xff0c;下面#xff0c;让我们进入字符函数和字符串函数的世界吧 字符串查找 strstr strtok 错误信息报告 strerror 字符操作 内存操作函… 各位CSDN的uu们你们好呀今天小雅兰的内容依旧是字符函数和字符串函数呀这篇博客会讲一些内存相关的函数下面让我们进入字符函数和字符串函数的世界吧 字符串查找 strstr strtok 错误信息报告 strerror 字符操作 内存操作函数 memcpy memmove memset memcmp strstr char * strstr ( const char *str1, const char * str2);   Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. #includestdio.h #includestring.h #includeassert.h int main() {char arr1[] abcdefbcdef;char arr2[] bcd;char* p strstr(arr1, arr2);if (p NULL){printf(找不到\n);}else{printf(%s\n, p);}return 0; } 模拟实现strstr #includestdio.h #includestring.h #includeassert.h char* my_strstr(const char* str1, const char* str2) {char* s1 NULL;char* s2 NULL;char* cp (char*)str1;while (*cp){s1 cp;s2 (char*)str2;while (*s1 *s2 *s1 *s2){s1;s2;}if (*s2 \0){return cp;}cp;}return NULL; } int main() {char arr1[] abcdefbcdef;char arr2[] bcd;char* p my_strstr(arr1, arr2);if (p NULL){printf(找不到\n);}else{printf(%s\n, p);}return 0; } strtok char * strtok ( char * str, const char * sep );   sep参数是个字符串定义了用作分隔符的字符集合第一个参数指定一个字符串它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。 strtok函数找到str中的下一个标记并将其用 \0 结尾返回一个指向这个标记的指针。注strtok函数会改变被操作的字符串所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。strtok函数的第一个参数不为 NULL 函数将找到str中第一个标记strtok函数将保存它在字符串 中的位置。strtok函数的第一个参数为 NULL 函数将在同一个字符串中被保存的位置开始查找下一个标记。如果字符串中不存在更多的标记则返回 NULL 指针。使用strtok这个函数 #define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h #includestring.h int main() {char arr[] xiaoyalanyeah.net;char buf[30] { 0 };strcpy(buf, arr);//把字符串的内容拷贝一份const char* p .;char* str strtok(buf, p);printf(%s\n, str);str strtok(NULL, p);printf(%s\n, str);str strtok(NULL, p);printf(%s\n, str);return 0; } 当然这个代码写得不是很好如果是有很多分隔符呢岂不是要写很多个printf这样代码冗余的问题就会非常严重那么必然就要用到循环啦下面我们来改进一下这个代码 #define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h #includestring.h int main() {char* p xiaoyalanyeah.net;const char* sep .;char arr[30];char* str NULL;strcpy(arr, p);//将数据拷贝一份处理arr数组的内容for (str strtok(arr, sep); str ! NULL; str strtok(NULL, sep)){printf(%s\n, str);}return 0; }strerror char * strerror ( int errnum );   返回错误码所对应的错误信息。 #define _CRT_SECURE_NO_WARNINGS 1 #includestdio.h #includestring.h int main() {char* p strerror(0);printf(%s\n, p);p strerror(1);printf(%s\n, p);p strerror(2);printf(%s\n, p);p strerror(3);printf(%s\n, p);p strerror(4);printf(%s\n, p);p strerror(5);printf(%s\n, p);p strerror(6);printf(%s\n, p);return 0; } #includestdio.h #includestring.h #includeerrno.h int main() {//打开文件//打开文件的方式如果文件的打开方式是“r”//文件存在则打开成功文件不存在则打开失败//打开文件夹失败的话会返回NULLFILE* pf fopen(test.txt, r);if (pf NULL){printf(打开文件失败原因是:%s\n, strerror(errno));return 1;}//读写文件//......//关闭文件fclose(pf);pf NULL;return 0; }   另一种写法 #includestdio.h #includestring.h #includeerrno.h int main() {//打开文件//打开文件的方式如果文件的打开方式是“r”//文件存在则打开成功文件不存在则打开失败//打开文件夹失败的话会返回NULLFILE* pf fopen(test.txt, r);if (pf NULL){perror(打开文件失败);return 1;}//读写文件//......//关闭文件fclose(pf);pf NULL;return 0; }   C语言的库函数在调用失败的时候会将一个错误码存放在一个叫errno的变量中当我们想知道调用库函数的时候发生了什么错误信息就可以将errno的错误码翻译成错误信息 字符分类函数  字符转换  int tolower ( int c ); int toupper ( int c );#include stdio.h #include ctype.h int main() {int i 0;char str[] Test String.\n;char c;while (str[i]){c str[i];if (isupper(c))c tolower(c);putchar(c);i;}return 0; }memcpy void * memcpy ( void * destination, const void * source, size_t num );   函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。这个函数在遇到 \0 的时候并不会停下来。 如果source和destination有任何的重叠复制的结果都是未定义的。  使用一下此函数 #includestdio.h #includestring.h void test1() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[8] { 0 };//把arr1中的前5个元素拷贝到arr2中memcpy(arr2, arr1, 20); } void test2() {float arr1[] { 1.0f,2.0f,3.0f,4.0f,5.0f };float arr2[8] { 0 };memcpy(arr2, arr1, 20); } int main() {test1();test2();return 0; } 模拟实现memcpy #includestdio.h #includestring.h #includeassert.h void* my_memcpy(void* dest, const void* src, size_t num) {void* ret dest;assert(dest ! NULL);assert(src ! NULL);while (num--){*(char*)dest *(char*)src;dest *(char*)dest 1;src *(char*)src 1;}return ret; } void test3() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[8] { 0 };//把arr1中的前5个元素拷贝到arr2中my_memcpy(arr2, arr1, 20); } int main() {test3();return 0; } #includestdio.h #includestring.h #includeassert.h void* my_memcpy(void* dest, const void* src, size_t num) {void* ret dest;assert(dest ! NULL);assert(src ! NULL);while (num--){*(char*)dest *(char*)src;dest *(char*)dest 1;src *(char*)src 1;}return ret; } void test4() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };my_memcpy(arr12, arr1, 40);int i 0;for (i 0; i 10; i){printf(%d , arr1[i]);} } int main() {test4();return 0; } 所以我们发现在内存重叠的情况下使用memcpy可能出现意想不到的效果                 在内存重叠的情况下使用memmove函数 memmove void * memmove ( void * destination, const void * source, size_t num );   和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果源空间和目标空间出现重叠就得使用memmove函数处理。模拟实现memmove   #include stdio.h #include string.h #includeassert.h void* my_memmove(void* dest, const void* src, size_t num) {void* ret dest;assert(dest ! NULL);assert(src ! NULL);if (dest src){//前-后while (num--){*(char*)dest *(char*)src;dest *(char*)dest 1;src *(char*)src 1;}}else{//后-前while (num--){*((char*)dest num) *((char*)src num);}}return ret; } void test4() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr12, arr1, 40);int i 0;for (i 0; i 10; i){printf(%d , arr1[i]);} } int main() {test4();return 0; }   memcmp int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 比较从ptr1和ptr2指针开始的num个字节 使用memcmp #include stdio.h #include string.h void test5() {int arr1[] { 1,2,3,4,5 };//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00int arr2[] { 1,2,3,4,6 };//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 06 00 00 00int ret memcmp(arr1, arr2, 17);printf(%d\n, ret); } int main() {test5();return 0; }   memset #include stdio.h #include string.h void test6() {int arr[10] { 0 };memset(arr, 1, sizeof(arr));int i 0;for (i 0; i 10; i){printf(%p\n, arr[i]);//这种写法没办法把每个数组元素设置为1}return 0; } int main() {test6();return 0; }     好啦小雅兰今天的内容就到这里啦这就是字符串函数基本的内容啦未来还要继续努力
http://www.ho-use.cn/article/10823418.html

相关文章:

  • 微信公众号上做网站如何高效建设品牌网站?
  • php毕业设计二手网站怎么做wordpress和typecho
  • 做移动网站优化排名如何查询网站是哪家公司做的
  • 网站为什么要备案企业如何建设免费网站
  • 用数据库做学校网站导购wordpress主题
  • 网站制作网站建设报价网站开发流程分析
  • 做养殖推广什么网站好青海省建设厅职业注册官方网站
  • 太原市建设工程招投标信息网站wordpress水印怎么开
  • 营销推广网站推广方案wordpress调用单页面
  • 河南郑州汽车网网站建设网站哪里有做的
  • 手机网站开发步骤软件华夏集团网站建设
  • 简洁个人博客网站模板展示型网站解决方案
  • 起域名网站做电子书屋的网站
  • 福建住房城乡建设厅网站企业公众号如何开通
  • 白云区手机版网站建设公司标志图片logo
  • 想建个图片网站网站如何防止黑客攻击
  • 中铁建设集团有限公司官方网站网站网站二维码收钱怎么做的
  • 网站案例介绍确定网站的主题与风格
  • 做文章网站旗县长安网站建设思路
  • 沈阳做网站直播的公司网站设计师联盟
  • 东莞长安做网站公司自媒体营销代理
  • 包年seo和整站优化苏州做网站建设公司
  • 企业做网站的多吗修改文章缩略字数 WORDPRESS
  • 一站式wordpress 广告 统计
  • 自学网站有哪些wordpress token
  • 360建站模板低价网站建设案例
  • 做网站 新域名 还是皮肤科在线医生免费咨询
  • 写作投稿网站网上提供免费主页空间的网站
  • python一句做网站做网站几个步骤
  • 商城网站建设解决方案二级网站内容建设要求