这是我的代码
#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
的长度,然后为char数组s
分配此字节数。但是问题是,当我调用strlen(s)
时,返回值不等于字符串str
的长度,因此当我在控制台上打印出s
时,它不是字符串我想要。任何人都可以告诉我原因,并对此进行更多解释?
答案 0 :(得分:2)
您需要分配比str.length()
多一个字符,以允许使用空字符来终止字符串,并且需要将该字符设置为空字符。
答案 1 :(得分:2)
当您有字符数组时,最后一个字节称为空终止符,在这种情况下为\0
。它告诉您的程序数组中字符结尾的位置。
str.length()
函数返回字符串中有多少字节。空字符不算作字节。因此,当str.length()
用来计算数组中的字符数时,它会一直计数到到达\0
。
当您需要创建一个与字符串具有相同“大小”的新数组时,必须将其长度增加一个字节,以容纳空终止符。
因此您的代码应为:
s = (char*)malloc(length + 1);