Грешка при изпращане на „const char *“ към параметър от тип „const uint8_t *“.

Кодирам приложение за iOS, в което съм декларирал константа на низ във файл с константи:

NSString * const kHeader = @"name,age,gender";

и в Константи.h

FOUNDATION_EXPORT NSString * const kHeader;

и се опитвам да напиша този низ в NSOutput поток в клас ViewController като:

[outputStream write: [kHeader UTF8String] maxLength: [kHeader length]];

Това показва предупреждение на компилатора: Изпращането на 'const char *' към параметър от тип 'const uint8_t *' (известен още като 'const unsigned char *') преобразува между указатели в цели числа с различен знак

Какво означава това? Как да разреша това? Моля помогнете. Гугълът не генерира много полезен резултат.


person Jean    schedule 06.08.2013    source източник
comment
Това означава, че UTF8String е подписано и изходящият поток очаква неподписана стойност. Просто добавете актьорски състав, за да заглушите предупреждението.   -  person borrrden    schedule 06.08.2013


Отговори (1)


В допълнение към предупреждението за подписан/неподписан указател, кодът ви всъщност може да е грешен. [kHeader length] връща броя на Unicode символите в низа и това може да е различно от броя UTF-8 байтове, върнати от [kHeader UTF8String].

Например @"€" има един Unicode знак, но 3 UTF-8 байта.

Така че трябва да замените това с

const char *utf8string = [kHeader UTF8String];
[outputStream write:(const uint8_t *)utf8string maxLength:strlen(utf8string)];

или алтернативно

NSData *data = [kHeader dataUsingEncoding:NSUTF8StringEncoding];
[outputStream write:[data bytes] maxLength:[data length]];
person Martin R    schedule 06.08.2013
comment
Нека опитам това и да се върна. това, което казваш, има много смисъл. Благодаря ти. - person Jean; 06.08.2013