爱问知识人 爱问教育 医院库

关于strcat函数

首页

关于strcat函数

strcat函数是把两个字符串连起来,可是我最近看到一个程序,str1和str2都是一个长度为10的字符型数组,给str2赋值后,执行如下代码:
memset(str1,0,10);
strcat(str1,str2);
最后结束是str2中的内容与str1相同了,这是为什么?

提交回答
好评回答
  • 2011-04-22 22:26:09
      原因很简单,就是strcat(str1,str2)会先去掉str1的结束符后再把str2接连到str1末尾,这样很符合一个字符串只能有一个结束符的规定。
    char串的结束符石'\0',也就是二进制0,那么strcat的时候系统会忽略串最后的'\0',比如strA="abcd\0",strB="ABC\0",那么strcat(strA,strB)= "abcdABC\0",如果strA="abcd\0\0\0……"结果也是一样的。
       那么你的说的问题原因就显而易见了,memset(str1,0,10); 之后str1的下标所指地址存储的值均为0,相当于str1[10]={'0','0','0'……},也可以理解为str1="\0\0\0……",strcat后str1的10个\0全部被忽略,字符串从起始地址接起,相当于 char *str1 = “abafadfadf”;char *str2="sadfasdfa",然后str1=str2了。
      

    L***

    2011-04-22 22:26:09

其他答案

    2011-04-22 22:36:10
  • memset(str1,‘0’,10); 要是你改成这样就不会那样了,只是有乱码,得在str最后补上\'0'作为结束符。。。。ASCII值中00表示空,就是什么也没有,所以str1连接str2就等于str2了。。。。
    

    花***

    2011-04-22 22:36:10

  • 2011-04-22 22:28:48
  • 1、strcat的操作是将str1结尾的"\0"(字符数组的终止符)去掉,再接上str2 结尾再加上'\0' 就是横向拼接字符串
    2、问题在memset里   memset将str1的前十位都置为0 而其实"\0"就是的ascii码值就是0 在处理str1时,第一位遇到0  自然而然认为其就是字符数组的终止符,所以str1其实是个空串  要是用printf输出的是空 
    3、既然str1第一位就是"\0" 那就没什么好说的了 直接去掉然后拼接上str2 其值也就跟str2一样了

    隐***

    2011-04-22 22:28:48

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 174-193
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):