A long
не будет иметь более 64 цифр на любой платформе (на самом деле меньше, чем это, но я слишком ленив, чтобы выяснить, какой сейчас фактический минимум) Так что просто печатайте в буфер фиксированного размера, затем используйте wcsdup
вместо того, чтобы пытаться вычислить длину заранее.
wchar_t* ltostr(long value) {
wchar_t buffer[ 64 ] = { 0 };
swprintf(buffer, sizeof(buffer), L"%li", value);
return wcsdup(buffer);
}
Если вы хотите char*
, это тривиально, чтобы перевести выше:
char* ltostr(long value) {
char buffer[ 64 ] = { 0 };
snprintf(buffer, sizeof(buffer), "%li", value);
return strdup(buffer);
}
Это будет быстрее и менее подвержено ошибкам, чем двойной вызов snprintf
, за счет тривиального объема стекового пространства.