读书人

应该是关于指针的有关问题吧

发布时间: 2012-05-06 16:15:43 作者: rapoo

应该是关于指针的问题吧
代码:
/*
a customized version of strcat()
*/
#include <iostream>
#include <cstring>
using namespace std;
void mystrcat(char *str1,char *str2,int len=0);
int main()
{
char ln1[]= "i love you ";
char ln2[]= "0123456789 ";
strcat(ln1,ln2);
cout < <ln1 < <endl;

strcpy(ln1, "i love you ");
cout < <ln1 < <endl;

mystrcat(ln1,ln2,0);
cout < <ln1 < <endl;
strcpy(ln1, "i love you ");
mystrcat(ln1,ln2,5);
cout < <ln1 < <endl;

}
void mystrcat(char *str1,char *str2,int len)
{
if(len==0)strcat(str1,str2);
while(*str1)str1++;
while(*str2 && len)
{
*str1=*str2;
str1++;str2++;
len--;
}
*str1= '\0 ';
}


输出很有意思 (不可以贴图么)
i love you0123456789
i love you
i love you123456789
i love you23456


看那个数字 就知道其中的蹊跷了 真亮了 不知道怎么了


[解决办法]
debug看看不就知道了?
[解决办法]
很正常啊,一点疑问都没有。就是你错用strcat造成的。

“src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。”

你的ln1显然没有多余的空间来容纳ln2,致使连接ln2后它们的内存区域重叠,ln2被ln1的后半部覆盖。原ln2所指位置的内容发生改变。

在你的程序里添加一些输出语句你就能看懂了:

C/C++ code
int   main() {         char   ln1[]= "i   love   you ";         char   ln2[]= "0123456789 ";         strcat(ln1,ln2);         cout < <ln1 < <endl;         cout<<ln2<<endl;      /*一处*/        strcpy(ln1, "i   love   you ");         cout < <ln1 < <endl;         cout<<ln2<<endl;      /*二处*/        mystrcat(ln1,ln2,0);         cout < <ln1 < <endl;         cout<<ln2<<endl;      /*三处*/        strcpy(ln1, "i   love   you ");         mystrcat(ln1,ln2,5);         cout < <ln1 < <endl;         cout<<ln2<<endl;      /*四处*/} 

读书人网 >C++

热点推荐