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

时间:2020-08-06 02:26:06

标签: c++ dynamic

这是我的代码

#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时,它不是字符串我想要。任何人都可以告诉我原因,并对此进行更多解释?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

当您有字符数组时,最后一个字节称为空终止符,在这种情况下为\0。它告诉您的程序数组中字符结尾的位置。

str.length()函数返回字符串中有多少字节。空字符不算作字节。因此,当str.length()用来计算数组中的字符数时,它会一直计数到到达\0

当您需要创建一个与字符串具有相同“大小”的新数组时,必须将其长度增加一个字节,以容纳空终止符。

因此您的代码应为:

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