|
From: | Ibadinov Marat |
Subject: | Re: NSString bug with test and really dodgy patch. |
Date: | Wed, 03 Oct 2012 16:02:33 +0300 |
On Oct 3, 2012, at 12:19 PM, Jens Ayton wrote:
Under OSX 10.6.8 it misbehaves badly with wide strings, but has no hard feelings about char arrays (not terminated by \0); I've got following output: 2012-10-03 15:51:34.667 printf[3894:903] abcd кириллица 2012-10-03 15:51:34.671 printf[3894:903] –∫–∏—Ä–∏– 2012-10-03 15:51:34.671 printf[3894:903] – 2012-10-03 15:51:34.672 printf[3894:903] – кириллица кири? кириллица For the program: #import <Foundation/Foundation.h> #include "wchar.h" static void test_string(const char *cstr, int precision) { char *array = malloc(strlen(cstr)); memcpy(array, cstr, strlen(cstr)); NSLog(@"%@", [NSString stringWithFormat:@"%.*s", precision, array]); } static void test_string_long(const wchar_t *wcstr, int precision) { wchar_t *array = malloc(wcslen(wcstr) * sizeof(wchar_t)); memcpy(array, wcstr, wcslen(wcstr) * sizeof(wchar_t)); NSLog(@"%@", [NSString stringWithFormat:@"%.*ls", precision, array]); } static void test_printf_long(const wchar_t *wcstr, int precision) { wchar_t *array = malloc(wcslen(wcstr) * sizeof(wchar_t)); memcpy(array, wcstr, wcslen(wcstr) * sizeof(wchar_t)); printf("%.*ls\n", precision, array); } int main (int argc, const char * argv[]) { @autoreleasepool { test_string("abcd", 4); printf("%s\n", "кириллица"); test_string("кириллица", 9); wchar_t *wcstr = L"кириллица"; test_string_long(wcstr, 9); NSLog(@"%@", [NSString stringWithFormat:@"%ls", wcstr]); printf("%ls\n", wcstr); test_printf_long(wcstr, 9); test_printf_long(wcstr, 18); } return 0; } I presume there is no need to test Apple's Foundation behavior with surrogate UTF-16 pairs. |
[Prev in Thread] | Current Thread | [Next in Thread] |