Отправка 'const char *' параметру типа 'const uint8_t *' ошибка

Я кодирую приложение для iOS, в котором я объявил строковую константу в файле констант:

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

и в Constants.h

FOUNDATION_EXPORT NSString * const kHeader;

и я пытаюсь записать эту строку в поток NSOutput в классе ViewController как:

[outputStream write: [kHeader UTF8String] maxLength: [длина kHeader]];

Это показывает предупреждение компилятора: Отправка 'const char *' параметру типа 'const uint8_t *' (также известному как 'const unsigned char *') преобразует указатели в целочисленные типы с другим знаком

Что это значит? Как мне решить эту проблему? Пожалуйста помоги. Googl'ing не дал большого полезного результата.


person Jean    schedule 06.08.2013    source источник
comment
Это означает, что UTF8String подписан, а выходной поток ожидает беззнаковое значение. Просто добавьте приведение, чтобы отключить предупреждение.   -  person borrrden    schedule 06.08.2013


Ответы (1)


В дополнение к предупреждению о подписанном / неподписанном указателе ваш код может быть неправильным. [kHeader length] возвращает количество символов Юникода в строке, и оно может отличаться от количества байтов 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