NSString を使用して、vsnprintf 関数をコーディングしたいと考えています。
これは私の vsnprintf の実装です:
int my_vsnprintf(char *buffer, size_t count, const char *format, ...)
{
int iRet;
va_list ap;
NSString *pnssBuffer=NULL;
NSString *pnssFormat;
const char *pcszBuffer;
/* Format with NSString */
pnssFormat=[NSString stringWithCString:format
encoding:NSUTF8StringEncoding];
va_start(ap, format);
pnssBuffer=[[NSString alloc] initWithFormat:pnssFormat arguments:ap];
/* Copy to char * */
pcszBuffer=[pnssBuffer cStringUsingEncoding:NSUTF8StringEncoding];
memcpy(buffer, pcszBuffer, count);
iRet=strlen(buffer);
/* Free */
[pnssBuffer release];
va_end(ap);
return iRet;
}
char * param で呼び出すと、次のように動作します。
my_vsnprintf(buffer, 256, "hello %s", "world");
NSLog(@"buffer = %s", buffer);
これを正しく出力してください: buffer = hello world
しかし、wchar_t * param で呼び出すと、世界の最初の文字しか取得できません
my_vsnprintf(buffer, 256, "hello %ls", L"world");
NSLog(@"buffer = %s", buffer);
これを印刷してください: buffer = hello w
理由がわかりません。関数の助けはありますか?