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

长沙做个网站多少钱基于ipv6的网站开发

长沙做个网站多少钱,基于ipv6的网站开发,凡客系统,天元建设集团有限公司第八分公司前言务必理解指针与内存模型#xff0c;不要死记硬背。内存里的字符串C语言中的字符串一般是char *类型的#xff0c;这是怎样存在内存中的呢#xff1f;cchar *s NIHAO;| s:400 ||---|---|---|---||N|I|H|A|O| 0 ||---|---|---|---|---|---||400|401|402|403|…前言务必理解指针与内存模型不要死记硬背。内存里的字符串C语言中的字符串一般是char *类型的这是怎样存在内存中的呢cchar *s NIHAO;| s:400 ||---|---|---|---||N|I|H|A|O| 0 ||---|---|---|---|---|---||400|401|402|403|404|405|如是上图假设字母A处于内存的第400号格子那么后面几个字母也是紧跟着的。变量s本身并没有储存字符串而存的是字符串的首地址400。也即s指向这个字符串。为什么没有专门一个字符串的类型而是要靠一个指针指向它呢因为字符串的长度是不固定的所以一个字符串还包含着长度信息基本类型是无法处理数据结构的。我们都知道字符串是以0结尾的而且这个更像是一种约定C编译器本身并没有对此做任何保证。比如这样cchar s[3] asd;puts(s); /* prints asd or something longer */这样做是危险的因为s只有3个格子字符串结尾的0并没有放进去。如果在它后面的内存格子并不是0那打印这个字符串时就跟我们预期的不一样了。字符串常量不可写cabc[0] z; /* wrong */char *s abc;s[0] z; /* wrong */char s[5] abc;s[0] z /* right */当指针s指向的是字符串常量(即直接写在程序里面的字符串时)要注意它是不可写的为啥用数组就没问题呢因为数组的初始化和指针有点区别cchar s[5] abc;/* 相当于 */char s[5];strcpy(s, abc);如果担心自己会不小心写错可以加上const关键字这样编译的时候就会报错这是一个好习惯接下来的示例程序中都会这么写。cconst char *s abc;s[0] z; /* causes a compiling error instead of runtime error */指针是要初始化才能使用的c/* wrong */char *s;s[0];上面的程序编译是能过的(可能有warning)但运行是一定会出错的因为编译器并不知道s指向哪些格子。c/* right */const char *s NIHAO;s[0];这样其实是隐式的分配了6个格子(包括字符串结尾的0)并让s指向它们c/* right */char s[6];s[0];c/* right */char s[6] NIHAO;s[0];数组其实跟指针没什么区别主要的区别是它在声明的时候就分配好了格子(方括号里的6就是告诉编译器给我6个格子)而且数组不能改变它的指向(也不能再要更多的格子)。为什么不能用等号来比较字符串比较字符串cconst char *s abcd;const char *t abcd;/* wrong */if (s t) {...}/* right */if (!strcmp(s, t)) {...}因为s和t都没有存字符串的内容它们存的是字符串的地址如果用比较比较的是两个字符串的地址是否相同。我们希望比较的是内容是否相同。请使用C语言库函数中的strcmp比较字符串是否相等复制字符串c/* tries to copy a string */char s[5] abcd;char *t s;t[3] z;puts(s); /* puts abcz */上面这种做法让t和s指向同一字符串修改t指向的内容会发现s指向的内容也被修改了。这种做法没有错经常会用到但不一定是你想要的。c/* wrong */char *s abcd;char *t; /* not initialized */strcpy(t, s);c/* right */char *s abcd;char t[10] {0}; /* or char *t (char *) malloc(5*sizeof(char)); */strcpy(t, s);使用strcpy复制字符串的内容而不是指针但也要注意初始化t这个指针怎样让函数得到一个字符串结果intfloat之类的很简单直接return就好但现在我想写一个函数它能够得到一个字符串三种错误的或者不太好的做法c/* no problem, but meaningless */const char *f(){const char *s abcd;return s;}/* wrong */char *f(){char s[100];/* do something with s */return s;}/* result correct but not good */char *f(){int n 10;char *s (char *) malloc(n*sizeof(char));/* do something with s */return s;}第一种情况就不说了返回一个字符串常量并没有问题因为它不可修改但是不可修改也就没什么意义了。第二种情况是完全错误的返回一个局部的数组。这个数组的内存会在函数调用完后被收回因此返回的指针指向的时候没有意义的地方。现代编译器一般都会对这个有warning。第三种情况是返回malloc的指针。这种情况你可以得到正确的答案但是不推荐调用这个函数的人很有可能不知道函数里面分配过内存不知道应该什么时候free这部分内存忘了free这部分内存一旦没有注意多次调用这个函数结果就是内存溢出这样的错误还非常不好排查所以不推荐正确的做法正确的做法是把分配内存这种事情放在函数外面做正如strcpy一样cchar *strcpy(char *dest, const char *src){int i;for (i 0; i strlen(src); i) {dest[i] src[i];}return dest;}dest是我们想要返回的字符串它是从外面传进来的原因是我们不想在函数内部为它分配内存而是在外面分配好了里面只对这个字符串进行修改。注意这里返回了char *但其实返回的正是原本传进来的dest这里只是为了方便而已。
http://www.pierceye.com/news/415699/

相关文章:

  • 张掖网站制作wordpress 主题安装教程
  • 企业网站建设合作合同网页做成app
  • 郑州建网站价格医院网页
  • 南京设计网站网站速度的重要性
  • 河南智能网站建设平台简易网站建设
  • 成都鱼羊环保网站制作设计网站 关键字 标签
  • 邓修明调研成都网站建设鞍山建一个网站大概要多少钱
  • 聊城网站开发公司专业开发小程序公司
  • 三门峡网站建设推广用个人电脑做服务器建网站
  • 黄冈论坛交友网站首页seo怎么做
  • 网站注册域名 免费网站建设进度及实施过程
  • 如何购买一个网站的域名小程序开发公司网
  • 产品包装设计素材网站均安建网站
  • 甘肃建设网站找别人做网站需要注意什么
  • php做电子商城网站创业找项目
  • 网站建设建设公司有哪些帝国手机网站cms系统
  • 网站设计包括什么软件房产交易网上预约平台
  • 企业做网站有什么好处坏处四川住房城乡和城乡建设厅网站首页
  • 小学学校网站建设计划广州seo顾问服务
  • 做淘宝素材网站哪个好用网站制作网站建设需要多少钱
  • 住房建设部官方网站设计费计取wordpress仿百度搜索主题
  • 云建站平台哪家好沈阳百度seo关键词排名优化软件
  • 响应式网站设计的优点国内优秀设计网站
  • 网站开发集成环境国内html5网站欣赏
  • iis7.5 没有默认网站北京seo的排名优化
  • 两学一做网站是多少钱营销型网站策划怎么做
  • 渭南做网站的自建房设计图
  • 移动网站建设价格线上推广专员是干嘛的
  • 做化妆刷的外贸网站企业网站托管备案
  • 湖南省建设干部学校 网站金融直播室网站建设