Возникает вопрос, откуда взялись эти магические «20».Поскольку он магический, он должен быть представлен в виде символической константы, а не целочисленного литерала, повторяемого в коде.Использование символической константы также имеет преимущество, заключающееся в том, что компилятор выполняет проверку ошибок для вас:
#define MAX_INTEGER_DIGITS (20)
int value = /* ... */
char* tmp_string = malloc(MAX_INTEGER_DIGITS);
snprintf(tmp_string, MAX_INTEGER_DIGITS, "%d", value);
(также обратите внимание, как я отбросил вещь sizeof (char)
, поскольку она полностью избыточна и (imo) оченьбеспорядок.)
С точки зрения производительности, вы, вероятно, можете покончить с защищенным вариантом строкового форматера, но так как вы все равно вызываете malloc()
здесь (не дешево), это, вероятно, не очень хорошовыиграть, чтобы удалить его.