strcat () по сравнению с sprintf ()

В дополнение к идентификатору и классы, являющиеся большим для установки стиля на отдельном объекте стихи подобный набор объектов, существует также другой протест помнить. Это также зависит от языка до некоторой степени. В ASP.NET можно добавить Отделение и иметь идентификатор. Но при использовании Панели вместо Отделения, Вы потеряете идентификатор.

13
задан Sinan Ünür 20 November 2009 в 18:55
поделиться

5 ответов

strcat будет быстрее, потому что sprintf должен сначала сканировать строку в поисках переменных формата.

Но настоящий выигрыш в том, что все знают, что strcat делает - объединяет строки. Использование sprintf для конкатенации не является стандартным использованием. И это заставило бы людей задуматься.

23
ответ дан 1 December 2019 в 18:49
поделиться

Учитывая выбор между двумя, я бы выбрал strcat ; это, безусловно, более читабельно и проясняет ваши намерения. Он также может быть немного быстрее, чем sprintf , но, вероятно, ненамного.

Но, независимо от того, какой метод вы выберете, вам обязательно следует использовать snprintf или strncpy для защиты от переполнения буфера.

Вы отметили этот вопрос как c и c ++ ; если вы используете C ++, было бы гораздо лучше использовать вместо него std :: string .

10
ответ дан 1 December 2019 в 18:49
поделиться

Если есть разница, эта разница зависит от флагов компилятора, использования компьютера во время выполнения кода, реализации библиотеки, ..., ...

Для вашего конкретного случая , мера .
Запустите оба сниппета несколько миллиардов раз и просчитайте время.

Я очень сомневаюсь, что вы найдете какую-либо существенную разницу.

Мне больше нравится strcat () : он ясно передает смысл кода.

6
ответ дан 1 December 2019 в 18:49
поделиться

strcat в этом случае намного быстрее. Помните, что sprintf () анализирует символ строки формата за символом в поисках% escape-символов. Сравните это, например, с:

strcpy (str + strlen (str), "Something");

.

1
ответ дан 1 December 2019 в 18:49
поделиться

Я согласен с другими: strcat () должен быть быстрее. Но для «лучших практик», если вы действительно заботитесь о скорости, вы не должны использовать ни то, ни другое. Вам лучше иметь такую ​​структуру, как:

typedef struct { size_t len, max; char *str; } mystring_t;

, чтобы отслеживать конец строки. Когда вы добавляете строку, просто переходите в конец и копируйте ее. Удвойте max , если выделенной памяти недостаточно. В качестве альтернативы, у вас может быть что-то необычное, упаковав вместе len , max и str .

1
ответ дан 1 December 2019 в 18:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: