gpt4 book ai didi

c++ - 两种情况下的输出不应该相同吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:31:15 24 4
gpt4 key购买 nike

请注意“len = strlen(s);”行中两个代码的区别在代码 1 中:它写在“strcpy(str,s)”之前,在代码 2 中它写在之后。它有什么区别?我在 Dev C++ 中运行我的代码,但我得到了不同的输出。两种情况下的输出不应该相同吗?

代码一:

#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

最佳答案

问题出在这里:

char str[];

这是一个零长度数组(顺便说一句,在标准 C++ 中你不能有零长度数组)。

此数组最多可包含 0 个字符,因此在您的情况下,零长度数组毫无意义。

您基本上是在覆盖不属于您的内存,并且您的两个程序的行为都是未定义的。由于行为未定义,因此解释两个版本中输出不同的原因也毫无意义。

试试这个,它可以让你的字符串大小达到 100:

char str[100];

要在 C++ 中使用字符串,您应该使用 std::string 而不是原始 C 字符串。

关于c++ - 两种情况下的输出不应该相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51871684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com