powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция strcat
6 сообщений из 6, страница 1 из 1
Функция strcat
    #33456239
Sea Urchin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема с функцией strcat.
Она берёт два строковых операнда, сцепляет их и возвращает УКАЗАТЕЛЬ на результат. Но при этом изменяется первый операнд, на который собстна и указывает. А как сделать так, чтобы результат помещался в новую строку, а операнды при этом не изменялись?
...
Рейтинг: 0 / 0
Функция strcat
    #33456241
saint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
char* mystrcat(char* str1, char* str2)
{
char* buf;
buf=new char[strlen(str1)+strlen(str2)+ 1 ];
buf[ 0 ]= 0 ;
strcat(buf, str1);
strcat(buf, str2);
return buf;
}
...
Рейтинг: 0 / 0
Функция strcat
    #33456246
Sea Urchin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо. Помогло.
...
Рейтинг: 0 / 0
Функция strcat
    #33456324
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ненадолго тебе это поможет. Память-то кто удалять будет ?
...
Рейтинг: 0 / 0
Функция strcat
    #33456617
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
saint
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
char* mystrcat(char* str1, char* str2)
{
char* buf;
buf=new char[strlen(str1)+strlen(str2)+ 1 ];
buf[ 0 ]= 0 ;
strcat(buf, str1);
strcat(buf, str2);
return buf;
}

Быстрее будет так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
char* mystrcat(char* str1, char* str2)
{
    char* buf;
    int len1, len2;

    if (buf=new char[(len1 = strlen(str1))+(len2 = strlen(str2))+ 1 ])
    {
        if (len1)
            memcpy(buf, str1, len1);
        if (len2)
            memcpy(&buf[len1], str2, len2 +  1 );   
        return buf;
    }
    return NULL;
}
MasterZiv
Ненадолго тебе это поможет. Память-то кто удалять будет?

:) Прописать смарт-указатели
...
Рейтинг: 0 / 0
Функция strcat
    #33457450
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Балтика saint
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
char* mystrcat(char* str1, char* str2)
{
char* buf;
buf=new char[strlen(str1)+strlen(str2)+ 1 ];
buf[ 0 ]= 0 ;
strcat(buf, str1);
strcat(buf, str2);
return buf;
}

Быстрее будет так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
char* mystrcat(char* str1, char* str2)
{
    char* buf;
    int len1, len2;

    if (buf=new char[(len1 = strlen(str1))+(len2 = strlen(str2))+ 1 ])
    {
        if (len1)
            memcpy(buf, str1, len1);
        if (len2)
            memcpy(&buf[len1], str2, len2 +  1 );   
        return buf;
    }
    return NULL;
}
MasterZiv
Ненадолго тебе это поможет. Память-то кто удалять будет?

:) Прописать смарт-указатели
А не проще ли будет использовать std::string, который хранит длину строк отдельно? BTW, есть функция _alloca которая позволяет размещать буфер заданного размера стеке, прада прдется истользовать макрос.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция strcat
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]