请C++高手帮我看一下,为什么这个程序结果会出现乱码。 程序是将一个字符串复制到另一个字符串中。

#include<iostream.h>voidstrcpy(chararray1[],chararray2[]){intsize;inti;size=sizeof(ar... #include<iostream.h>

void strcpy(char array1[],char array2[])
{
int size;
int i;
size=sizeof(array1)/sizeof(char); //求出数组的字符个数
for(i=0;i<size;i++)
{
array2[i]=array1[i];
}

}

void main()
{
char str1[20]="Congratulations!";
char str2[20];
strcpy(str1,str2);
cout<<"str1:"<<str1<<endl;
cout<<"str2:"<<str2<<endl;
}
展开
 我来答
百度网友3df8970f5
2012-01-30 · TA获得超过918个赞
知道小有建树答主
回答量:1268
采纳率:50%
帮助的人:1064万
展开全部
strcpy函数写错了
当数组作为参数传入函数时,其实是传入的数组地址
在strcpy函数里,你用sizeof array1,其实是对一个字符指针求大小,不能获取数组的大小,实际结知含慧果老闹是4,你只拷贝了4个字符,其他就是错误的数据
正确做法,可以传入数组和要拷贝字符个数或者根据字符串以'搭答\0\结尾来做判断,一个个字符拷贝
boat4
2012-01-30
知道答主
回答量:11
采纳率:0%
帮助的人:7万
展开全部
可能是sizeof使用不当引起的,sizeof用于数组好像是有特殊处理的。

#include<iostream.h>
#include<string.h>

void strcpy(char array1[],char array2[])
{
int size;
int i;
// size=sizeof(array1)/sizeof(char); //求出数组的字符个数

size=strlen(array1); //求出数组的字符个数

for(i=0;i<size;i++)
{
array2[i]=array1[i];
}

array2[i] = '\0';

}

void main()
{
char str1[20]="Congratulations!";
char str2[20];
strcpy(str1,str2);
cout<<"str1:"<<str1<<endl;
cout<孝派<悉慎改"str2:"<睁判<str2<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-01-30
展开全部
两个问题,已经改好,具体请看注释:

#include<iostream.h>
#include<string.h> //这里!这里!这里!这里!这里!包含这个头文件,后面的strlen库函数用到
void strcpy(char array1[],char array2[])
{
int size;
int i;
//size=sizeof(array1)/sizeof(char); //求出数组的字符个数
size=strlen(array1);//这里!这里!这里!这备轮里!这里!用strlen来求字符串的长度
for(i=0;i<size;i++)
{
array2[i]=array1[i];
}

}

void main()
{
char str1[20]="Congratulations!";
char str2[20]={NULL};//这里!这里!这里!这里!这里!str2需要初始旅滚橘化为空,否则里面有拆团随机数据
strcpy(str1,str2);
cout<<"str1:"<<str1<<endl;
cout<<"str2:"<<str2<<endl;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
King920406
2012-01-30 · TA获得超过594个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:84.7万
展开全部
#include<iostream.h>
/*数strcpy形参表内所定义的数组不是引用类型,所以无法该函数功能修改实参值。而是修改在自动对象内被初始绝喊化实参的副本*/
//在该函数体内执行的功能在函数每次调用笑升完毕都会被撤销。所以没有实现数组间的复制
void strcpy(char array1[],char array2[])
{
int size;
int i;
size=sizeof(array1)/sizeof(char); //求出数组的字符个数
for(i=0;i<size;i++)
{
array2[i]=array1[i];
}

}
void main()
{
char str1[20]="碰宏老Congratulations!";
char str2[20];
/*综上所述,形参没有修改实参的值,所以数组str2没有被初始化,因此在打印的时候,显示一段乱码*/
strcpy(str1,str2);
cout<<"str1:"<<str1<<endl;
cout<<"str2:"<<str2<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zzu_liuwei
2012-01-30 · TA获得超过372个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:225万
展开全部
sizeof是运算符,其运算对象是类型而不是变量或一般表达式
就本题来说前洞,可以将strcpy改为
void strcpy(char array1[],char array2[])
{
int i;
for(i=0;a[i]!='\0';i++)//此时a数组必须是以袜悔袜'告激\0'结束才行
b[i] = a[i];
}
或者strlen函数
void strcpy(char array1[],char array2[])
{
int size;
int i;
size = strlen(a);
for(i=0;i<size;i++)
b[i] = a[i];
}
建议用指针处理更简单一些,效率也更高,就一条语句就可以实现
void strcpy(char *s,char *d)
{
while(*d++=*s++);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式