В дополнение к идентификатору и классы, являющиеся большим для установки стиля на отдельном объекте стихи подобный набор объектов, существует также другой протест помнить. Это также зависит от языка до некоторой степени. В ASP.NET можно добавить Отделение и иметь идентификатор. Но при использовании Панели вместо Отделения, Вы потеряете идентификатор.
strcat
будет быстрее, потому что sprintf
должен сначала сканировать строку в поисках переменных формата.
Но настоящий выигрыш в том, что все знают, что strcat
делает - объединяет строки. Использование sprintf
для конкатенации не является стандартным использованием. И это заставило бы людей задуматься.
Учитывая выбор между двумя, я бы выбрал strcat
; это, безусловно, более читабельно и проясняет ваши намерения. Он также может быть немного быстрее, чем sprintf
, но, вероятно, ненамного.
Но, независимо от того, какой метод вы выберете, вам обязательно следует использовать snprintf
или strncpy
для защиты от переполнения буфера.
Вы отметили этот вопрос как c
и c ++
; если вы используете C ++, было бы гораздо лучше использовать вместо него std :: string
.
Если есть разница, эта разница зависит от флагов компилятора, использования компьютера во время выполнения кода, реализации библиотеки, ..., ...
Для вашего конкретного случая , мера .
Запустите оба сниппета несколько миллиардов раз и просчитайте время.
Я очень сомневаюсь, что вы найдете какую-либо существенную разницу.
Мне больше нравится strcat ()
: он ясно передает смысл кода.
strcat
в этом случае намного быстрее. Помните, что sprintf ()
анализирует символ строки формата за символом в поисках% escape-символов. Сравните это, например, с:
strcpy (str + strlen (str), "Something");
.
Я согласен с другими: strcat ()
должен быть быстрее. Но для «лучших практик», если вы действительно заботитесь о скорости, вы не должны использовать ни то, ни другое. Вам лучше иметь такую структуру, как:
typedef struct { size_t len, max; char *str; } mystring_t;
, чтобы отслеживать конец строки. Когда вы добавляете строку, просто переходите в конец и копируйте ее. Удвойте max
, если выделенной памяти недостаточно. В качестве альтернативы, у вас может быть что-то необычное, упаковав вместе len
, max
и str
.