应该是关于指针的问题吧
代码:
/*
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所指位置的内容发生改变。
在你的程序里添加一些输出语句你就能看懂了:
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; /*四处*/}