#include<iostream.h>
#include<string.h>
int Add(int x,int y)
{
return x+y;
}
char *Add(char *x,char *y)
{
return strcat(x,y);
}
void main()
{
int a=1,b=2;
char str1[10]="I am";
char str2[13]=" a student.";
cout<<Add(a,b)<<endl;
cout<<Add(str1,str2)<<endl;
}
这样运行是正确的,但是调换最后两行的程序后却输出错误的结果,请帮忙解决。谢谢
#include<string.h>
int Add(int x,int y)
{
return x+y;
}
char *Add(char *x,char *y)
{
return strcat(x,y);
}
void main()
{
int a=1,b=2;
char str1[10]="I am";
char str2[13]=" a student.";
cout<<Add(a,b)<<endl;
cout<<Add(str1,str2)<<endl;
}
这样运行是正确的,但是调换最后两行的程序后却输出错误的结果,请帮忙解决。谢谢
如果你的是类的成员中的重载,那么是不会有问题的。
现在你是在main()中进行的重载。就有重载二义性问题了。
#include <iostream.h>
#include <string.h>
int Add(int x,int y)
{
return x+y;
}
char *Add(char *x,char *y)
{
return strcat(x,y);
}
void main()
{
int a=1,b=2;
char str1[10]="I am";
char str2[13]=" a student.";
cout <<Add(a,b)<<endl;
cout <<Add(str1,str2) <<endl;
}
这样子有正确结果,编译器是先扫描你的int Add(int x,int y)然后再扫描 char *Add(char *x,char *y)读到一个重载用的表项里面。然后当你调用Add(a,b)的时候,去遍历那个重载用的表,发现int Add(int x,int y)适合,就调用了它。然后轮到Add(str1,str2)了,不过这个时候,在重载表项的第一个项int Add(int x,int y)不能满足它。然后继续遍历。发现char *Add(char *x,char *y)可以,然后就调用,就得到了正确的结果。
你的字符串长度问题,造成溢出了。
应该是这个原因 试验了
LZ说后两行换次序后 char*版的会溢出 int版就是错误结果
先int再char*则不会 或改str1[100]也不会
的回答应该是对的吧!
谢谢你的帮助啊。
我一新手,请多指教啊。
谢谢!