2011-08-09 6 views
11

SQLite'de stringWithCString değiştirirken bunun nasıl yapılacağını biliyorum, bunun yerine sadece stringWithUTF8String. sysctlbyname ile geri döndüğünde, bu char * ile aynı mı? (aşağıdaki kod)stringWithCString kullanımdan kaldırıldı ... yani sysctlbyname tarafından döndürülen char * ile ne kullanırım?

- (NSString *) platform{ 
    size_t size; 
    sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
    char *machine = malloc(size); 
    sysctlbyname("hw.machine", machine, &size, NULL, 0); 
    NSString *platform = [NSString stringWithCString:machine]; 
    free(machine); 
    return platform; 
} 

Şimdiden teşekkürler!

+0

evet stringWithUTF8String karakter dize döndürür. – rptwsthi

cevap

19

Kullandığınız C dizesi UTF-8 olarak kodlanmışsa, stringWithUTF8String: kullanın. Düz ASCII ise, NSASCIIStringEncoding kodlamasını kullanarak stringWithCString:encoding: kullanın. Aksi takdirde, muhtemelen Latin-1 kullanılarak kodlanır, bu durumda stringWithCString:encoding: kodunu NSISOLatin1StringEncoding kodlamasıyla kullanmalısınız. Bu durumda

, sysctlbyname neredeyse kesinlikle geri bir ASCII dizesi size verecek, böylece yapmalısınız:

NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 

sana zarar yapacak diğer iki yöntemden birini kullanarak rağmen. stringWithCString lehine kullanımdan kaldırılmıştır:

NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 
2

sadece sysctlbyname durumunda ASCII dize kodlama belirtmek gerekir kodlamayı :. StringWithCString davranışını tam olarak çoğaltmak için [NSString defaultCStringEncoding] kullanabilirsiniz: ancak NSASCIIStringEncoding veya NSUTF8StringEncoding öğesinin belirtilmesi muhtemelen daha iyidir. Sysctlbyname tarafından döndürülen kodlama dolaylı görünmektedir, dolayısıyla 7 bit ASCII güvenli bir bahistir ve kodlamayı uygun hale getirir. Eğer

errorString = [NSString stringWithCString:iax_errstr]; 

hata deneyin bulursanız

1

stringWithCString:

1

bu

errorString = [NSString stringWithCString:iax_errstr encoding:NSASCIIStringEncoding] 
İlgili konular