将'const char *'发送到'const uint8_t *'类型的参数错误

时间:2013-08-06 06:57:24

标签: ios objective-c compiler-warnings

编写iOS应用程序,我在Constants文件中声明了一个字符串常量:

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

并在Constants.h中

FOUNDATION_EXPORT NSString * const kHeader;

我正在尝试将此字符串写入ViewController类中的NSOutput流:

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

这显示了编译器警告: 将'const char *'发送到'const uint8_t *'类型的参数(又名'const unsigned char *'),在指向不同符号的整数类型的指针之间进行转换

这是什么意思?我该如何解决这个问题?请帮忙。 Googl'ing并没有产生太多有用的结果。

1 个答案:

答案 0 :(得分:5)

除了签名/无符号指针警告之外,您的代码实际上可能错误[kHeader length]返回字符串中的Unicode字符数,以及此字符 可以与[kHeader UTF8String]返回的UTF-8字节数不同。

例如,@"€"有一个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]];