String Format Specifiers demandes de documents d'Apple,Pourquoi NSString et NSLog semblent-ils gérer% C et% lc (et% S et% ls) différemment?
Le format pris en charge par les spécificateurs méthodes de mise en forme NSString et CFString fonctions de formatage suivre les IEEE printf specification; ... Vous pouvez également utiliser ces spécificateurs de format avec la fonction NSLog.
Mais, alors que la spécification printf
définit %C
comme équivalent %lc
et %S
comme équivalent %ls
, seulement %C
et %S
semblent fonctionner correctement avec NSLog
et +[NSString stringWithFormat:]
.
Par exemple, considérons le code suivant:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
unichar str[3];
str[0] = 63743;
str[1] = 33;
str[2] = (unichar)NULL;
NSLog(@"NSLog");
NSLog(@"%%S: %S", str);
NSLog(@"%%ls: %ls", str);
NSLog(@"%%C: %C", str[0]);
NSLog(@"%%lc: %lc", str[0]);
NSLog(@"\n");
NSLog(@"+[NSString stringWithFormat:]");
NSLog(@"%%S: %@", [NSString stringWithFormat:@"%S", str]);
NSLog(@"%%ls: %@", [NSString stringWithFormat:@"%ls", str]);
NSLog(@"%%C: %@", [NSString stringWithFormat:@"%C", str[0]]);
NSLog(@"%%lc: %@", [NSString stringWithFormat:@"%lc", str[0]]);
[pool drain];
return 0;
}
Compte tenu de la spécification printf
, je me attends à chacune des paires ci-dessus pour imprimer la même chose. Mais, quand je lance le code, je reçois la sortie suivante:
2009-03-20 17:00:13.363 UnicharFormatSpecifierTest[48127:10b] NSLog
2009-03-20 17:00:13.365 UnicharFormatSpecifierTest[48127:10b] %S: !
2009-03-20 17:00:13.366 UnicharFormatSpecifierTest[48127:10b] %ls: ˇ¯!
2009-03-20 17:00:13.366 UnicharFormatSpecifierTest[48127:10b] %C:
2009-03-20 17:00:13.367 UnicharFormatSpecifierTest[48127:10b] %lc:
2009-03-20 17:00:13.367 UnicharFormatSpecifierTest[48127:10b]
2009-03-20 17:00:13.368 UnicharFormatSpecifierTest[48127:10b] +[NSString stringWithFormat:]
2009-03-20 17:00:13.368 UnicharFormatSpecifierTest[48127:10b] %S: !
2009-03-20 17:00:13.369 UnicharFormatSpecifierTest[48127:10b] %ls: ˇ¯!
2009-03-20 17:00:13.369 UnicharFormatSpecifierTest[48127:10b] %C:
2009-03-20 17:00:13.370 UnicharFormatSpecifierTest[48127:10b] %lc:
que je fais quelque chose de mal, ou est-ce un bug dans le code d'Apple?
Merci; Cela a du sens! Je pense que je caractériserais cela comme un bug dans la documentation, parce que les méthodes de formatage de NSString ne suivent clairement pas la spécification printf dans ce cas. Est-ce que cela semble être une évaluation juste? –
Bogue modéré; il devrait dire quelque chose comme "..., avec quelques variations", et les marquer dans le tableau.Le document décrit correctement les interprétations de CF/Cocoa dans le tableau, bien qu'il ne les marque pas différemment des définitions de printf. –
Voilà comment je le caractériserais aussi. Merci encore pour votre aide! –