Типы символов char и String для функции одинаковы?

0

в этом коде, если я заменю " 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;
}
  • 2
    Как насчет того, чтобы попробовать это?
  • 0
    Вы попробовали? Каковы были ваши результаты?
Показать ещё 2 комментария
Теги:

1 ответ

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 прежде чем возвращать строку.

  • 0
    в моем Turbo C, даже если я включаю "cstring.h", это дает ошибку, если я использую "строку" в любом месте программы. так что я не могу попробовать этот код :(
  • 0
    @Priyanka std::string находится в стандартном заголовке <string> . Но вам нужен достаточно современный компилятор, соответствующий стандартам. Это старые вещи, поэтому все, что реализует C ++ 98, должно делать.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню