风雅_乌龟 2015-12-21 11:04 采纳率: 0%
浏览 1610
已采纳

一个关于VC6下strcpy函数的问题

#include
using namespace std;
#include
void main()
{
int b,b1,b2;
char p2[4];
char p[3]={"dsfs","jasa","ussg"};
int a1=1,a2=1;
strcpy(p2,
(p+a1));//同下
strcpy(*(p+a1),*(p+a2));//为什么运行这句会出现运行停止
strcpy(*(p+a2),p2);//同上
b=strlen(*(p+a1))-1;//但是为什么这两句又不会出错
b1=strlen(*(p+a2))-1;
b2=b>b1?b1:b;

for(int a4=0;a4<3;a4++){
cout<<*(p+a4)<<b<<" ";}
}

  • 写回答

9条回答 默认 最新

  • 纹枰老妖 2015-12-21 12:22
    关注

    题主,我又看了您在其它回答下面的回复,在这里帮您解惑一下。首先,strlen为什么不崩溃,这是因为strlen并不做修改等工作,它仅仅是为了统计长度,自然不会崩溃。 然后,像【char a[3] = "hu";】这种代码,a的地址是处于堆栈区的。打个比方,a的地址是1111,而那个【"hu"】所处的位置却是常量区【比如地址是9876】,那个【a[3] = "hu";】时会发生什么呢?程序会记住【"hu"】的地址9876,然后从这个位置开始,逐一拷贝字符内容到a地址1111上。。。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?