c - 两个警告 : assignment makes integer from pointer without a cast and comparison between pointer and integer

标签 c pointers compiler-warnings

如何修复这两个警告。我已经反编译了这段代码并对其进行了一些修复,但我无法摆脱这两个警告。

我想我需要将 int DecryptedPacketa 更改为 char * DecryptedPacketavoid * DecryptedPacketa 之类的东西?或者什么?

encryption.c:26: warning: assignment makes integer from pointer without a cast
encryption.c:27: warning: comparison between pointer and integer

void EncryptPacket(unsigned char *DecryptedPacket)
{
  int DecryptedPacketa;
  char *addressEncryptedPacket;
  const int packetSize = *(unsigned short *)DecryptedPacket+77;  
  unsigned char EncryptedPacket[packetSize];

    *(unsigned short *)(EncryptedPacket+77) = packetSize;
    addressEncryptedPacket = EncryptedPacket + 2;

    //Skips first 2 bytes of DecryptedPacket before looping to end of DecryptedPacket Buffer.
    //Process Byte by Byte for transformations.
    for ( DecryptedPacketa = &DecryptedPacket + 3;            //<- Warning 1
           DecryptedPacketa < &DecryptedPacket + packetSize;  //<- Warning 2
           ++DecryptedPacketa )
    {
      //... Lots of code (fake example below)...
      *addressEncryptedPacket = 123 + *(unsigned char *)DecryptedPacketa; //does encryption here
      //... Lots of code ...
    }
}

最佳答案

DecryptedPacketa 的类型为声明中定义的 int

int DecryptedPacketa;

但是你给它分配了一个指针。同样,您将其与循环条件中的指针进行比较。这就是您收到这些警告的原因。

您需要做的是将 DecryptedPacketa 定义为 unsigned char * 类型,并将 for 循环更改为

unsigned char *DecryptedPacketa;

for (DecryptedPacketa = DecryptedPacket + 2;           
     DecryptedPacketa < DecryptedPacket + packetSize;  
     ++DecryptedPacketa)

{ 
    // loop body
}

您需要在开头跳过两个字节。因此,您应该从 DecryptedPacket + 2 开始循环。另请注意,函数参数 DecryptedPacket 已经是一个指针。您不需要对其应用 address-of 运算符 &

关于c - 两个警告 : assignment makes integer from pointer without a cast and comparison between pointer and integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23646794/

相关文章:

c - 变量在循环中途发生变化,我不知道是什么问题

c - 使用指针访问结构成员时产生垃圾数据

c - 如何知道二进制整数是否代表负数?

c - 如何将字符串读入空指针?

c# - 导出非托管函数指针时发生访问冲突

c++ - 使用复合赋值运算符解决转换警告

c++ - 从 char 文字转换为 char * 的警告

c++ - g++如何在忽略函数返回值时获得警告

c - 返回指向结构的指针

我可以使用 getchar() 清除 scanf 和 fgets 之间的缓冲区吗?