【问题标题】:I found this error (Sending 'const uint8_t (*)[kStreamChunkSize]' to parameter of type 'void *' discards qualifiers)?我发现了这个错误(将 'const uint8_t (*)[kStreamChunkSize]' 发送到 'void *' 类型的参数会丢弃限定符)?
【发布时间】:2013-06-03 16:29:33
【问题描述】:

我在 NSData 文件中有一种方法。

 - (void)getBytes:(void *)buffer;

但是当我使用这种方法时就像..

  const uint8_t bytes [kStreamChunkSize];
  [chunk getBytes:&bytes];

然后它给出这个错误

将“const uint8_t (*)[kStreamChunkSize]”发送到“void *”类型的参数会丢弃限定符

如何解决此错误。请帮帮我。

【问题讨论】:

  • 旁注:最好使用getBytes:length: 以避免缓冲区溢出的可能性。
  • 如何使用常量?

标签: objective-c macos


【解决方案1】:

它丢弃了const 限定符,这是一个问题。 getBytes: 通过将字节写入传入的数组来获取字节。但是,您不能写入 const 字节的数组(这样做会调用未定义的行为),这就是 const 的含义。将数组的声明更改为

uint8_t bytes[kStreamChunkSize];

此外,不要传递指向数组的指针 - 如果您只是使用它的名称而不使用 & 运算符,它无论如何都会衰减为指向其第一个元素的指针。

【讨论】:

  • 感谢 H2CO3。我可以像 [chunk getBytes:(void *)&bytes] 那样投射吗?
  • @AmitGujjar 你可以,但你为什么要那样做? (更好的是:尽管我只是解释了为什么你不应该使用 addressof 运算符,你为什么还要这样做?)
  • @AmitGujjar:如果您实际上不需要数据副本,您也可以致电const uint8_t *bytes = [chunk bytes]。
猜你喜欢
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2014-02-20
  • 2015-01-13
  • 1970-01-01
  • 2021-11-10
相关资源
最近更新 更多