Geniş char dizesini biçimlendirmek ve std :: wstring öğesini döndürmek için bir işlev uygulamanız gerekir. Benim uygulamasıdır:OSX'deki vswprintf ile geniş char dizgisi nasıl biçimlendirilir (std :: wstring öğesini döndürmek için)
std::wstring format(const wchar_t* fmt, ...)
{
std::wstring ret;
va_list va;
va_start(va, fmt);
int size = vswprintf(nullptr, 0, fmt, va);
if (size > 0)
{
ret.resize(size + 1);
vswprintf(&ret[0], size + 1, fmt, va);
}
va_end(va);
return ret;
}
o pencerelerde iyi çalışır, ancak vswprintf (nullptr, 0, bicim, va) dönecektir çünkü ne yazık ki osx çalışmıyor -1.
yalnızca std kullanılabilir ve dize uzunluğunun belirli bir aralıkta olduğunu kabul edemiyorum.
Bunu yapmanın bir yolu olmalı, ama bulamıyorum, yardımcı olabilir misiniz? teşekkürler
"nullptr" yerine okunaklı bir işaretçi vermeye çalışabilir misiniz? Belki de işaretçi geçerliliğinin ekstra kontrolü vardır. – SHR
@SHR ([std :: vswprintf] (http://en.cppreference.com/w/cpp/io/c/vfwprintf) return -1 –
(OS X'te) gözlemlemek ne için belgelenmiş bir davranıştır, işe * "[...] üretilecek karakter sayısı, boyutuna eşit veya daha büyükse," dönüş değeri [bir] negatif değerdir. "*). Bu arabellek, son biçimlendirilmiş dizeyi tutacak kadar büyük olana ve bir arabellek üzerine bir 'std :: wstring' döndürene kadar, döngüsel bir yerel arabelleğe okumaya devam etmelisiniz. Ne yazık ki, Microsoft'un [_vscwprintf] (https://msdn.microsoft.com/en-us/library/w05tbk72.aspx) uzantısının standart bir uygulaması yoktur. – IInspectable