【发布时间】:2018-08-16 07:23:55
【问题描述】:
注意“len = strlen(s);”行中两个代码的区别在代码 1 中:它写在 "strcpy(str,s)" 之前,而在代码 2 中它写在之后。它有什么不同?我在 Dev C++ 中运行我的代码,我得到了不同的输出。两种情况下的输出不应该相同吗?
代码 1:
#include <iostream>
#include <string.h>
using namespace std;
class String{
private:
char str[];
int len;
public:
String()
{
cout << "Default Constructor" << endl;
len = 0;
strcpy(str,"");
}
String(char s[])
{
cout << "parameterised constructor" << endl;
len = strlen(s);
strcpy(str,s);
}
void print()
{
cout << str << " len = " << this->len << " strlen = " << strlen(str) << endl;
}
};
int main()
{
String str2("Hello World");
str2.print();
return 0;
}
输出 1:
parameterised constructor
Hello World len = 1819043144 strlen = 11
代码 2:
#include <iostream>
#include <string.h>
using namespace std;
class String{
private:
char str[];
int len;
public:
String()
{
cout << "Default Constructor" << endl;
len = 0;
strcpy(str,"");
}
String(char s[])
{
cout << "parameterised constructor" << endl;
strcpy(str,s);
len = strlen(s);
}
void print()
{
cout << str << " len = " << this->len << " strlen = " << strlen(str) << endl;
}
};
int main()
{
String str2("Hello World");
str2.print();
return 0;
}
输出 2:
parameterised constructor
len = 11 strlen = 1
【问题讨论】:
-
将 sn-ps 简化为仅显示感兴趣的部分(不同的
strlen和strcpy调用和输出)的最小版本可能会改善您的问题。 -
很确定这是未定义的行为,你 strcpy 没有分配所需的内存或任何东西。