" char *"和"字符串"函数的返回类型是一样的吗?

时间:2014-01-30 07:25:52

标签: c++

在此代码中,如果我将“ char * ”替换为“ string ”作为函数返回类型,保持整个代码不变,它会起作用吗? / p>

char* sum_str(char* s1, char* s2)
{
    int lenS1 = strlen(s1);
    int lenS2 = strlen(s2);
    char* newString = malloc((lenS1 + lenS2 + 1) * sizeof(char));
    int i = 0;
    while(i < lenS1)
    {
        newString[i] = s1[i];
        i++;
    }
    while(i < lenS2 + lenS1)
    {
        newString[i] = s2[i - lenS1];
        i++;
    }
    newString[i] = '\0';
    return newString;
}

1 个答案:

答案 0 :(得分:4)

它将起作用 1 ,但这并不意味着char*string返回类型相同。

可以从std::string隐式构建char*。因此,您返回一个新的string实例,该实例拥有char*指向的数据副本。它(几乎)与说这个相同:

std::string s = newString; // newString is your char*
return s;

请记住,您必须在free上致电newString

在惯用的C ++中连接字符串的方法是

std::string s1 = ....;
std::string s2 = ....;
std::string s3 = s1 + s2;

1除非您有内存泄漏。在返回字符串之前,您必须在free上调用newString