в этом коде, если я заменю " char * " на " string " как возвращаемый тип функции, сохраняя весь код как есть, будет ли он работать?
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 но это не означает, что типы возвратов 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
прежде чем возвращать строку.
std::string
находится в стандартном заголовке <string>
. Но вам нужен достаточно современный компилятор, соответствующий стандартам. Это старые вещи, поэтому все, что реализует C ++ 98, должно делать.