使用动态分配的char数组的长度



这是我的代码

#include<iostream>
#include<string>
using namespace std;
char* getString(char*& s)
{
string str;
getline(cin, str);
int length = str.length();
s = (char*)malloc(length);
for (int i = 0; i < length; ++i)
s[i] = str[i];
return s;
}
void main()
{
char* s;
getString(s);
cout << s << endl;
}

在我的getString()函数中,我创建了一个字符串str,并将输入字符串传递给它。然后我计算str的长度,然后为字符数组s分配这个字节数。但问题是,当我调用strlen(s)时,返回值不等于字符串str的长度,所以当我将s打印到控制台时,它不是我想要的字符串。有人能告诉我为什么并解释更多吗??

您需要比str.length()多分配一个字符,以允许终止字符串的null字符,并且您需要将该字符设置为null字符。

当您有一个字符数组时,最后一个字节被称为空终止符,在这种情况下是。它告诉程序数组中字符的末尾在哪里。

str.length()函数返回字符串中的字节数。空字符不算作字节。因此,当str.length()开始计算数组中的字符数时,它会一直计数,直到达到

当您需要创建一个与字符串"大小"相同的新数组时,必须将其延长一个字节才能容纳null终止符。

所以你的代码应该是:

s = (char*)malloc(length + 1);