【问题标题】:Sending 'const char *' to parameter of type 'const uint8_t *' error将“const char *”发送到“const uint8_t *”类型的参数错误
【发布时间】:2013-08-06 06:57:24
【问题描述】:

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

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 *”)类型的参数会在指向具有不同符号的整数类型的指针之间进行转换

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

【问题讨论】:

  • 这意味着UTF8String 是有符号的,并且输出流需要一个无符号的值。只需添加一个演员来消除警告。

标签: ios objective-c compiler-warnings


【解决方案1】:

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

【讨论】:

  • 让我试试这个然后回来。你说的很有道理。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-12-20
  • 2023-04-08
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 2013-06-03
  • 2014-01-21
  • 2011-10-23
相关资源
最近更新 更多