Saturday, January 11, 2014

NUL karaktert tartalmzó string

Mike Ash bemutat pár dolgot amivel meg lehet zavarni a Cocoa-t, és ezek közül a NUL karaktert tartalmazó string könnyen előjöhet:
A lényeg, hogy C string-eknél ez jelöli a végét. Egy NSString simán tartalmazhat NUL karaktert ami ASCII-ben és Unicode-ban is:
NSString *s = @"abc\0def";
Ha utána megnézzük a hosszát akkor ugyan még mindig 7-et kapunk:
(lldb) p [s length]
(unsigned int) $1 = 7
de ha magával a sting-gel akarunk csinálni valami akkor könnyen belefuthatunk egy eslő ránézésre érthetetlen problémába:
(lldb) po s
abc
(lldb) po [s stringByAppendingPathExtension:@"txt"]
abc
Matt Thompson NSCharacterSet-es írásából kiindulva megoldás lehet a NUL karakterek eltávolítására a string feldarabolása egy NSArray-ba a ezek mentén majd a tömb eleminek összfűzése:
if (NSNotFound != [s rangeOfString:@"\0"].location) {
    NSLog(@"NUL character found");
    NSArray *components = [s componentsSeparatedByString:@"\0"];
    s = [components componentsJoinedByString:@""];

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.