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

网站设计与程序方向专业东营做网站优化公司

网站设计与程序方向专业,东营做网站优化公司,wp如何做网站地图,自适应网站做推广文章目录 1. 获取字符串长度strlen 2. 复制字符串strcpystrncpy 3. 拼接字符串strcatstrncat 4. 字符串比较strcmpstrncmp 1. 获取字符串长度 strlen 库函数strlen的原型如下#xff1a; size_t strlen( char const *string );注意strlen返回一个类型为size_t的值。这个类型… 文章目录 1. 获取字符串长度strlen 2. 复制字符串strcpystrncpy 3. 拼接字符串strcatstrncat 4. 字符串比较strcmpstrncmp 1. 获取字符串长度 strlen 库函数strlen的原型如下 size_t strlen( char const *string );注意strlen返回一个类型为size_t的值。这个类型是在头文件stddef.h中定义的它是一个无符号整数类型。在表达式中使用无符号数可能导致不可预料的结果。例如下面两个表达式看上去是一样的 if( strlen( x ) strlen( y ) ) ... if( strlen( x ) – strlen( y ) 0 ) ...但事实上它们是不相等的。第1条语句将按照你预想的那样工作但第2条语句的结果将永远是真。strlen的结果是个无符号数所以操作符左边的表达式也将是无符号数而无符号数绝不可能是负的。 表达式中如果同时包含了有符号数和无符号数可能会产生奇怪的结果。和前一对语句一样下面两条语句并不相等其原因相同。 if( strlen( x ) 10 ) ... if( strlen( x ) – 10 0 ) ...如果把strlen的返回值强制转换为int就可以消除这个问题。 2. 复制字符串 strcpy 用于复制字符串的函数是strcpy它的原型如下所示 char *strcpy( char *dst, char const *src );这个函数把参数src字符串复制到dst参数。如果参数src和dst在内存中出现重叠其结果是未定义的。由于dst参数将进行修改所以它必须是个字符数组或者是一个指向动态分配内存的数组的指针不能使用字符串常量。该函数返回它们第1个参数的一份拷贝就是一个指向目标字符数组的指针。 目标参数的以前内容将被覆盖并丢失。即使新的字符串比dst原先的内存更短由于新字符串是以NUL字节结尾所以老字符串最后剩余的几个字符也会被有效地删除。举个例子来说 char message[] Original message; ... if (...)strcpy(message, Different);如果条件为真并且复制顺利执行数组将包含下面的内容 第1个NUL字节后面的几个字符再也无法被字符串函数访问因此从任何现实的角度看它们都已经是丢失的了。 程序员必须保证目标字符数组的空间足以容纳需要复制的字符串。如果字符串比数组长多余的字符仍被复制它们将覆盖原先存储于数组后面的内存空间的值。strcpy无法解决这个问题因为它无法判断目标字符数组的长度。例如 c char message[] Original message; ... if (...)strcpy(message, A different message);第2个字符串太长了无法容纳于message字符数组中。因此strcpy函数将侵占数组后面的部分内存空间改写原先恰好存储在那里的变量。这可能发生意想不到的效果。如果在使用这个函数前确保目标参数足以容纳源字符串就可以避免大量的调试工作。 strncpy 和strcpy一样strncpy把源字符串的字符复制到目标数组。然而它总是正好向dst写入len个字符。它的原型如下 char *strncpy(char *dst, char const *src, size_t len);如果strlen( src )的值小于lendst数组就用额外的NUL字节填充到len长度。如果strlen( src )的值大于或等于len那么只有len个字符被复制到dst中。注意它的结果将不会以NUL字节结 尾 。 strncpy调用的结果可能不是一个字符串因此字符串必须以NUL字节结尾。如果在一个需要字符串的地方例如strlen函数的参数使用了一个不是以NUL字节结尾的字符序列会发生什么情况呢strlen函数将无法知道NUL字节是没有的所以它将继续进行查找一个字符接一个字符直到它发现一个NUL字节为止。或许它找了几百个字符才找到而strlen函数的这个返回值从本质上说是一个随机数。或者如果函数试图访问系统分配给这个程序以外的内存范围程序就会崩溃。 这个问题只有当你使用strncpy函数创建字符串然后或者对它们使用str开头的库函数或者在printf中使用%s格式码打印它们时才会发生。在使用不受限制的函数之前你首先必须确定字符串实际上是以NUL字节结尾的。例如考虑下面这个代码段 char buffer[BSIZE]; ... strncpy(buffer, name, BSIZE); buffer[BSIZE - 1]\0;如果name的内容可以容纳于buffer中最后那个赋值语句没有任何效果。但是如果name太 长这条赋值语句可以保证buffer中的字符串是以NUL结尾的。以后对这个数组使用strlen或其 他不受限制的字符串函数将能够正确工作。 3. 拼接字符串 strcat 要想把一个字符串添加连接到另一个字符串的后面你可以使用strcat函数。它的原型如下 char *strcat( char *dst, char const *src );strcat函数要求dst参数原先已经包含了一个字符串可以是空字符串。它找到这个字符串的末尾并把src字符串的一份拷贝添加到这个位置。如果src和dst的位置发生重叠其结果是未定义的。该函数返回它们第1个参数的一份拷贝就是一个指向目标字符数组的指针。 strcpy(message, Hello ); strcat(message, customer_name); strcat(message, , how are you?);每个strcat函数的字符串参数都被添加到原先存在于message数组的字符串后面。其结果是下面这个字符串 Hello Jim, how are you? 和前面一样程序员必须保证目标字符数组剩余的空间足以保存整个源字符串。但这次并不是简单地把源字符串的长度和目标字符数组的长度进行比较必须考虑目标数组中原先存在的字符串。 我们也可以这样嵌套因为返回值是第一个参数的指针 strcat( strcpy( dst, a ), b );strcpy首先执行。它把字符串从a复制到dst并返回dst。然后这个返回值成为strcat函数的第1个参数strcat函数把b添加到dst的后面。 它等价于 strcpy( dst, a ); strcat( dst, b );strncat 尽管strncat也是一个长度受限的函数但它和strncpy存在不同之外。它从src中最多复制len个字符到目标数组的后面。它的原型如下 char *strcat( char *dst, char const *src );但是strncat总是在结果字符串后面添加一个NUL字节而且它不会像strncpy那样对目标数组用NUL字节进行填充。注意目标数组中原先的字符串并没有算在 strncat的长度中。strncat最多向目标数组复制len个字符再加一个结尾的NUL字节它才不管目标参数除去原先存在的字符串之后留下的空间够不够。 4. 字符串比较 strcmp 比较两个字符串涉及对两个字符串对应的字符逐个进行比较直到发现不匹配为止。那个最先不匹配的字符中较“小”也就是说在字符集中的序数较小的那个字符所在的字符串被认为“小于”另外一个字符串。如果其中一个字符串是另外一个字符串的前面一部分那么它也被认为“小于”另外一个字符串因为它的NUL结尾字节出现得更早。这种比较被称为“词典比较”对于只包含大写字母或只包含小写字母的字符串比较这种比较过程所给出的结果总是和我们日常所用的字母顺序的比较相同。 库函数strcmp用于比较两个字符串它的原型如下 int strcmp( char const *s1, char const *s2 );如果s1小于s2strcmp函数返回一个小于零的值。如果s1大于s2函数返回一个大于零的值。如果两个字符串相等函数就返回零。注意标准并没有规定用于提示不相等的具体值。它只是说如果第1个字符串大于第2个字符串就返回一个大于零的值如果第1个字符串小于第2个字符串就返回一个小于零的值。一个常见的错误是以为返回值是1和1分别代表大于和小于。但这个假设并不总是正确的。 对于这个函数常出现的错误是 if( strcmp( a, b ) )他以为如果两个字符串相等它的结果将是真。但是这个结果将正好相反因为在两个字符串相等的情况下返回值是零假。然而把这个返回值当作布尔值进行测试是一种坏风格因为它具有三个截然不同的结果小于、等于和大于。所以更好的方法是把这个返回值与零进行比较。 由于strcmp并不修改它的任何一个参数所以不存在溢出字符数组的危险。但是和其他不受限制的字符串函数一样strcmp函数的字符串参数也必须以一个NUL字节结尾。如果并非如此strcmp就可能对参数后面的字节进行比较这个比较结果将不会有什么意义。 strncmp strncmp也用于比较两个字符串但它最多比较len个字节。它的原型为 int strncmp( char const *s1,char const *s2,size_t len );如果两个字符串在第len个字符之前存在不相等的字符这个函数就像strcmp一样停止比较返回结果。如果两个字符串的前len个字符相等函数就返回零。 参考 《C和指针》
http://www.zqtcl.cn/news/719750/

相关文章:

  • 一个人做商城网站网站推广的几个阶段
  • 做国学类网站合法吗html5教程pdf下载
  • 云南省文化馆网站建设二级域名分发平台
  • 网站版面布局结构图网站收录批量查询
  • 网站开发手机模拟器常州到丹阳
  • 淮南医院网站建设班级网站开发报告
  • 东莞营销网站建设哪家好微信api接口
  • 凡科建站怎么导出网页wordpress视频采集插件
  • 个人介绍网站源码云主机上传网站
  • app推广平台网站系统登录入口
  • 做公司宣传册的网站成crm网
  • 新乡公司做网站军事新闻内容摘抄
  • 讯美智能网站建设泰安网络科技有限公司电话
  • 新泰建设局网站北京公司排名seo
  • 新网站上线wordpress用户登陆
  • 景安网站备案表格首页风格
  • 做网站卖菜刀需要什么手续互联网营销顾问
  • 山东鲁中公路建设有限公司网站电商网站建设任务分解结构
  • 王野苏婉卿乐清网站优化
  • 三亚市住房和城乡建设厅网站wordpress适合企业网站模板
  • php网站建设思路方案中国空间站组合体
  • 帝国+只做网站地图厦门app定制公司
  • 网站运营推广主要做什么的高匿代理ip
  • 网站建设与维护采访稿wordpress 图床加速
  • 建设国际互联网网站完整网站开发教程
  • 一个购物交易网站怎么做网站管理功能图
  • 做有后台的网站如何提交网站地图
  • 网站建设税率多少潍坊市住房和城乡建设局网站
  • 网站图片怎么做白色背景青岛公司做网站的价格
  • 网站seo工具wordpress放视频没画面