首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-05-06 
应该是关于指针的问题吧代码:/*acustomizedversionofstrcat()*/#include iostream#include cstringusi

应该是关于指针的问题吧
代码:
/*
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;      /*四处*/} 

热点排行