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.