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

凡科做的网站怎么改壁纸电商数据中台

凡科做的网站怎么改壁纸,电商数据中台,网络设计开发网站,小程序开发需要什么软件C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp() 在了解strncpy、strncat()、前,需要先了解strcpy()、strncat(): C语言函数:字符串函数及模拟实现strlen() 、strcpy()、 strcat()_srhqwe的博客-CSDN博客 strncp…

C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp()

 

        在了解strncpy、strncat()、前,需要先了解strcpy()、strncat():

C语言函数:字符串函数及模拟实现strlen() 、strcpy()、 strcat()_srhqwe的博客-CSDN博客

strncpy():

        作用:拷贝受限制长度的字符串,意思是:可以指定拷贝字符的个数到目标字符串内。

        限制字符串个数是为了让程序相对安全,降低访问越界等情况出现的可能性。但是不会绝对安全,一个程序员要写bug如挥手一般简单.

参数部分:

char * __cdecl strncpy (char * dest,const char * source,size_t count)

count是指定传入的个数。

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main()
{char de[20] = "abcdef";char so[] = "qwer";strncpy(de, so, 2);//拷贝2个字符printf("%s\n", de);//结果:qwcdefreturn 0;
}

        当拷贝的字符串的个数超出原字符串的个数时,多出的部分会传\0进去:

 

 

strncpy函数的实现:

        在strcpy基础上,写strncpy并不难。

        因此直接展示源码:

char * __cdecl strncpy (char * dest,const char * source,size_t count)
{char *start = dest;while (count && (*dest++ = *source++) != '\0')    /* copy string */count--;if (count)                              /* pad out with zeroes */while (--count)*dest++ = '\0';return(start);
}

        因为多了count用于控制长度,所以while循环也多了一个count:

        当count不为0时,while循环继续。

        直到count为0时,自动跳出。

        (*dest++ = *source++) != '\0') 和strcpy一样。其中!=\0可以去掉。

        当没有\0时,dest和source一起++找下一个字符。

        当在source找到\0时,把\0传入后while循环结束

        if语句是为了保证count被置为0,因为count是我们需要拷贝的字符串个数。

        就是上面所说的,如果超越了source本身的个数,会自动补\0

        最后return 最初的dest,即start

strncat():

        作用:追加受限制的字符串。

参数部分:

char * __cdecl strncat (char * front,const char * back,size_t count)

         

int main()
{char de[20] = "abcd";char so[] = "qwer";strncat(de, so, 2);printf("%s\n", de);//结果:abcdqwreturn 0;
}

        与strncpy一样,如果追加的个数超出so的范围呢?会和strcpy一样?

int main()
{char de[20] = "abcd";char so[] = "qwer";strncat(de, so, 6);printf("%s\n", de);//结果:abcdqwerreturn 0;
}

        并不会,具体是怎么做的呢?那就先看看这个函数的实现:

strncat的实现:

strncat的源码:

char * __cdecl strncat (char * front,const char * back,size_t count)
{char *start = front;while (*front++);front--;while (count--)if ((*front++ = *back++) == 0)return(start);*front = '\0';return(start);
}

        第一个while循环,和strcat一样,先找到front的\0,然后从\0开始向后追加。

        第二个while循环,count--作为条件语句,意思是循环count次,从而可以保证追加的个数。

        while循环的if语句,是从front的\0开始向后追加back的元素,当在back中遇到是\0时,==0,那么就直接返回。因此如果追加的个数超出范围,不会追加\0,而是直接返回。

        当count==0时,while循环退出,说明目前为止,已经把想传入的字符串传完了,因为上面是后置++,所以此时的front已经指向了最后一个元素的后面的指针。所以直接将此时指针指向的front的元素改成\0,即: *front = '\0';

        最后return 原front地址

strncmp():

   在了解strncmp()前,需要先了解strcmp():

C语言函数:字符串函数及模拟实现strcmp()_srhqwe的博客-CSDN博客

        作用:对比受限制的两串字符串

        strncmp和strcmp其实相差并不大,只是限制了对比的范围。返回值与strcmp是一样的

        

 参数部分:

int __cdecl strncmp
(const char *first,const char *last,size_t      count
)

 

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main()
{char de[20] = "abcd";char so[] = "aba";strncmp(de, so, 3);printf("%s\n", de);//结果:1return 0;
}

        输入3比较的就是de和so的前三个字符

        

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main()
{char de[20] = "abad";char so[] = "aba";int ret = strncmp(de, so, 7);printf("%d\n",ret );//结果:1return 0;
}

        即使输入的数字超出了两个字符串的个数也没事,因为往后比较的都是\0。与strcmp基本一致。

strncmp()函数的实现:

        strncmp函数源码:

int __cdecl strncmp
(const char *first,const char *last,size_t      count
)
{size_t x = 0;if (!count){return 0;}if( count >= 4 ){/* unroll by four */for (; x < count-4; x+=4){first+=4;last +=4;if (*(first-4) == 0 || *(first-4) != *(last-4)){return(*(unsigned char *)(first-4) - *(unsigned char *)(last-4));}if (*(first-3) == 0 || *(first-3) != *(last-3)){return(*(unsigned char *)(first-3) - *(unsigned char *)(last-3));}if (*(first-2) == 0 || *(first-2) != *(last-2)){return(*(unsigned char *)(first-2) - *(unsigned char *)(last-2));}if (*(first-1) == 0 || *(first-1) != *(last-1)){return(*(unsigned char *)(first-1) - *(unsigned char *)(last-1));}}}/* residual loop */for (; x < count; x++){if (*first == 0 || *first != *last){return(*(unsigned char *)first - *(unsigned char *)last);}first+=1;last+=1;}return 0;
}

        第一个if语句,如果count==0那么就不用比较了,因为比较的区间没有。

        第二个if语句只是将区间划分成[0,4]和(4,正无穷)讨论

        之后的语句就是把每个每个字符进行比较,返回比较的结果。

http://www.yayakq.cn/news/363363/

相关文章:

  • j2ee 建设简单网站动漫设计与制作学什么
  • 温岭手机网站建设wordpress模板展示网站
  • 吉林手机版建站系统价格网站播放大视频如何做
  • 网站推广seo蜘蛛屯优化排名万能视频下载工具
  • 广州住房和建设局网站外链代发平台
  • 备案时网站建设方案书纪念馆展厅设计
  • 【转】网页 网站 html如何实现"关闭窗口"代码大全网站设计师的工作内容
  • 高埗网站建设公司如何做正规电影网站
  • 济南网站备案流程杭州seo的优化
  • 做网站和app怎么跑业务买国外的东西在哪个平台
  • 河南郑州网站建设哪家公司好小程序样式模板
  • 网站备案流程何时改怎样设计网站首页
  • 负面信息搜索引擎 网站网站空间200m
  • 义乌建设银行交罚款网站成全视频免费观看在线看记忆深处的作文怎么写
  • 潢川手机网站建设自己怎么个人网站
  • 建立简单网站制作一个网页的步骤
  • 仿站小工具怎么用公司员工培训方案
  • 河北区网站建设表白网页链接大全
  • 济南行知网站建设wordpress自定义404
  • 网站建设 话术如何用dreamer做网站
  • 服务器网站怎么做的免费自助建站软件
  • 做网站加班多吗建外贸商城网站
  • 一个公司名可以备案多少个网站织梦可以仿所有网站吗
  • dw网站建设的心得体会国内最厉害的公关团队
  • 惠城网站制作优化营商环境存在问题及整改措施
  • 郑州做网站的公司msgg手机写代码的软件
  • 雄县哪里有建设网站的asp网站做文件共享上传
  • 网站二级导航制作免费虚拟机安卓版
  • 网站首页做一点开有动画网店推广方法和技巧
  • 网站建设服务宗旨安新seo优化排名网站