NSString *dbReadString(FILE *f) { char cBuf[256]; NSString *result = nil; int len = 0; fread(&len, 1, 1, f); if ( len > 0 ) { if ( len > 255 ) len = 255; fread(&cBuf, len, 1, f); cBuf[ len ] = 0; result = [[NSString alloc] initWithBytes:cBuf length:len encoding:NSWindowsCP1251StringEncoding]; NSString *result2 = [[NSString alloc] initWithCString: cBuf encoding: NSWindowsCP1251StringEncoding]; if ([result compare:result2] != NSOrderedSame) NSLog(@"/%@/ ! = /%@/", result, result2); } return result; }
NSLog иногда срабатывает.
Upd: Если встречается буфер с содержимым к примеру: ‘AB’\0’C’ (при длине строки в 4 символа), то при использовании инициализатора initWithBytes: length: encoding: нулевые символы тоже попадают в строку.
Это приводит к непредсказуемым результатом в работе с этой строкой.
Так что лучше использовать initWithCString.