是头文件的问题。
前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。
后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因 此,当使用
#include
char* mystrcpy(char* s1,const char* s2)
{
char* s=s1;
while(*s++=*s2++);
return s1;
}
int main()
{
char a[50];
const char* s="hello,I am atudent.\n";
//std::
cout<
这样好了哈
改成如下:
char* mystrcpy(char* s1,const char* s2)
{
char* s=s1;
while(*s++=*s2++);
*s = '\0'; //注意这条语句的重要性
return s1;
}
using namespace std;=》这个没有加,还有就是std::要省略。因为“::”是要在外面调用时才可应用
首先缺一行using namespace std;
然后就是最后在main语句中输出后要加return 0;
不加using namespace std;应该也没问题
char* mystrcpy(char* s1,const char* s2)
{
char* s=s1;
while(*s++=*s2++); //出错了,没有限制结尾,造成非法访问,
//*s++ 有歧义的语句,应写成*(s++) *(s2++)避免歧义
return s1;
}
可以参考以下
//szDes为目标字符串指针,iLenDes为目标指针的内存空间大小
//szRes为来源字符串指针,iLenRes表示要复制的字符串的长度
char* mystrcpy(char* szDes, int iLenDes,const char* szRes, int iLenRes)
{
int iOffset = 0;
while( iOffset < iLenDes && iOffset < iLenRes)
{
szDes[iOffset] = szRes[iOffset];
iOffset++;
}
if ( iOffset < iLenDes - 1 )
{
szDes[iOffset+1] = '\0';
}
else
{
szDes[iOffset] = '\0';
}
return szDes;
}