一个C++程序,我到底错在哪呢?

2025-02-09 19:30:18
推荐回答(6个)
回答1:

是头文件的问题。
格式不一样
前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。
后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因 此,当使用时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

回答2:

#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<}
这样好了哈

回答3:

改成如下:
char* mystrcpy(char* s1,const char* s2)
{
char* s=s1;
while(*s++=*s2++);
*s = '\0'; //注意这条语句的重要性
return s1;
}

回答4:

using namespace std;=》这个没有加,还有就是std::要省略。因为“::”是要在外面调用时才可应用

回答5:

首先缺一行using namespace std;
然后就是最后在main语句中输出后要加return 0;

不加using namespace std;应该也没问题

回答6:

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;
}