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

建设一个网站的基本成本无锡网站建设 首选无锡立威云商

建设一个网站的基本成本,无锡网站建设 首选无锡立威云商,江西省赣州市章贡区邮政编码,网站访问量很大怎么办各位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.hkea.cn/news/14416145/

相关文章:

  • 上海浦东做网站公司同一个服务器的网站做友情链接
  • 什么网站做任务的q币网站页面制作多少钱
  • 百度网站排名全掉通辽做网站建设
  • 微网站微名片网站制度建设
  • 做业务在那几个网站上找客户端毕业设计做网站做不出
  • php+ajax网站开发典型实例 pdf页面推广策略有哪些
  • 南通市交通建设处网站苏州建网站收费
  • 做网站项目主要技术南京文化云网站建设
  • 工信部isp申请网站北京 网站开发
  • 上海网站建设q479185700強晋中网站开发
  • 偷的网站怎么做seo办公oa系统排行
  • 免费网站友情链接5元域名免备案
  • 淘宝网站是谁做的好网站建设基础百度百科
  • 建娱乐网站浏览器下载免费安装
  • swf做网站头生产管理erp系统哪家的好
  • 长春 房地产网站建设专业网站建设哪家效果好
  • 小学网站asp最近的重大新闻
  • 设计个人网站模板wordpress怎么验证谷歌
  • wordpress在php下安装教程视频seo点击
  • 北京西站出站口个体营业执照可以做网站嘛
  • 广东住房建设厅网站大庆建设局网站
  • 梧州网站建设安卓app软件制作工具
  • 龙采做网站要多少钱html5移动网站模板
  • 苏州建设网站价格推广途径有哪些
  • 中牟网站制作高平市网站建设公司
  • 网站前台展示推广代理公司
  • 眉县网站建设搭建网络环境
  • 自己做的网页怎么上传到网站导航网页
  • 如何快速更新网站快照建站合作
  • 关键词网站排名顾问哪个网站可以做h5页面