ios - 将“const char *”发送到“const uint8_t *”类型的参数时出错

标签 ios objective-c compiler-warnings

我正在编码一个iOS App,其中我在Constants文件中声明了一个字符串常量:

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

并在Constants.h中
FOUNDATION_EXPORT NSString * const kHeader;

并尝试将此字符串写入ViewController类中的NSOutput流,如下所示:

[outputStream写:[kHeader UTF8String] maxLength:[kHeader长度]];

这显示了编译器警告:
向类型为“const uint8_t *”(又名“const unsigned char *”)的参数发送“const char *”可在指针之间转换为具有不同符号的整数类型

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

最佳答案

除了有符号/无符号指针警告之外,您的代码实际上还可能是错误的。[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]];

关于ios - 将“const char *”发送到“const uint8_t *”类型的参数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18073564/

相关文章:

ios - 在设置应用程序中看不到MyAppNotificationSettings选项

ios - 为 NSURLSession 设置委托(delegate)并对其进行单元测试

visual-studio-2008 - 当我忘记处理 IDisposable 对象时,Visual Studio 可以警告我吗?

ios - 每月更新 NSUserDefaults 值

ios - 应用关闭后保存图片

ios - 有什么方法可以在本地存储我的应用程序数据 (Sqlite) 并且我可以在删除或重新安装我的应用程序后访问该数据?

ios - 单击 UITabBarController 时的自定义操作

ios - box2D中如何避免碰撞力?

perl - 使用 Perl,如何跟踪常量被重新定义的位置?

c++ - 是否存在 C4129 警告未指示错误的真实案例?