MyTetra Share
Делитесь знаниями!
Самый быстрый и оптимальный способ копирования строк в Cи и C++
Время создания: 18.09.2023 16:37
Текстовые метки: язык, Си, Си++, C++, строка, бастро, оптимально, копирование
Раздел: Компьютер - Программирование - Язык C (Си)
Запись: xintrea/mytetra_syncro/master/base/1695044272676g3qa07r/text.html на raw.github.com

Не утихают споры о том, как можно быстро копировать "низкоуровневые" строки в языках Си и Си++. Не сложные объекты строк, например такие как QString в библиотеке Qt, а самые простые, доступные в стандартной библиотеке. Здесь написаны самые быстрые способы, которые выглядят максимально наглядно.



Язык C



const char *a = "это строка";

char *b = strdup(a);

...

free(b); // После работы с дубликатом, его надо удалить



Функция strdub() создает копию строки. Внутри себя она вызывает функцию malloc(), чтобы выделить память под создаваемый дубликат строки. Поэтому после использования дубликата, выделенную под него память нужно не забыть высвободить через функцию free(), чтобы небыло утечки.


У функции strdup() есть более безопасный аналог strndup(), в котором вторым аргументом можно ограничить максимально возможную длинну копируемой строки. Данная функция всегда делает копию, которая обязательно будет завершена null-terminated символом, даже если исходная строка была длиннее, чем заданная длинна (т. е. после последнего скопированного символа всегда будет стоять \x0, на какой бы символ не заканчивалось копирование).


Функции strdub() и strndup() возвращают NULL, если не удалость выделить память под новую строку или скопировать строку на которую указывает первый аргумент. Если выделение памяти и создание дубликата строки произошло нормально, то возвращается указатель на дублирующую строку.



Язык C++


В языке C++ все гораздо проще:



std::string a = "это строка";

std::string b = a;



Просто копируется объект, без всяких плясок с управлением памятью.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования