关于strcat函数
strcat函数是把两个字符串连起来,可是我最近看到一个程序,str1和str2都是一个长度为10的字符型数组,给str2赋值后,执行如下代码: memset(str1,0,10); strcat(str1,str2); 最后结束是str2中的内容与str1相同了,这是为什么?
原因很简单,就是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了。
memset(str1,‘0’,10); 要是你改成这样就不会那样了,只是有乱码,得在str最后补上\'0'作为结束符。。。。ASCII值中00表示空,就是什么也没有,所以str1连接str2就等于str2了。。。。
1、strcat的操作是将str1结尾的"\0"(字符数组的终止符)去掉,再接上str2 结尾再加上'\0' 就是横向拼接字符串 2、问题在memset里 memset将str1的前十位都置为0 而其实"\0"就是的ascii码值就是0 在处理str1时,第一位遇到0 自然而然认为其就是字符数组的终止符,所以str1其实是个空串 要是用printf输出的是空 3、既然str1第一位就是"\0" 那就没什么好说的了 直接去掉然后拼接上str2 其值也就跟str2一样了
答:LZ:你那个字符串数组是一维数组,有2个元素. A(0)= "a" A(1) = "p!"详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>