背景:我收到一个数组作为char *作为套接字会话的一部分。现在我们必须匹配它的标记(HTTP标头)。这里的代码是我们创建了一个UBYTE *并在使用UBYTE进行类型转换后从char数组中获取值。后来同一个UBYTE指针我们传递给其他函数,在将它转换为char *之后接受char *。
这里的问题是这在发布版本中有效,而不是在调试版本中(使用-g和不同的优化)。不仅在调试模式下添加少量打印件也会隐藏问题。
所以我的问题在这里,UByte指针(本质上是一个无符号字符)和char指针之间有什么区别。将UByte更改为char是在所有模式中解决我的问题,但我没有任何解释相同?有什么想法吗?
答案 0 :(得分:3)
char *
和unsigned char *
之间的投射没有任何问题。如果您的意外行为因优化级别而异,那么您的代码肯定存在错误,但它可能与丢弃演员表中的签名无关。
除此之外,UBYTE
是一个非常荒谬的typedef,因为存在标准的C类型uint8_t
,它在stdint.h
中是相同的并定义。
答案 1 :(得分:0)
也许你可以首先解释一下,为什么你必须首先使用unsigned char
?
什么不起作用意味着什么?
void*
,char*
和unsigned char*
具有不同的语义,您应该根据它使用它们:
void*
指向非特定数据,除非您将其转换为某些真实类型,否则您无法执行任何操作char*
有两种不同的含义,无论是作为文本字符串,还是作为非特定数据,但可以在低(字节)级别进行寻址(修补)signed char
和unsigned char
是您要在其上执行算术的小宽度整数