Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 两个警告:赋值从指针生成整数而不进行强制转换,以及指针和整数之间的比较_C_Pointers_Compiler Warnings - Fatal编程技术网

C 两个警告:赋值从指针生成整数而不进行强制转换,以及指针和整数之间的比较

C 两个警告:赋值从指针生成整数而不进行强制转换,以及指针和整数之间的比较,c,pointers,compiler-warnings,C,Pointers,Compiler Warnings,如何修复这两个警告。我已经反编译了这段代码,并对其进行了一些修复,但我无法摆脱这两个警告 我想我需要将int DecryptedPacketa更改为类似char*DecryptedPacketa或void*DecryptedPacketa之类的内容?还是什么 encryption.c:26: warning: assignment makes integer from pointer without a cast encryption.c:27: warning: comparison betw

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

我想我需要将
int DecryptedPacketa
更改为类似
char*DecryptedPacketa
void*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*地址加密包;
const int packetSize=*(无符号短*)DecryptedPacket+77;
未签名字符加密数据包[packetSize];
*(无符号短*)(加密数据包+77)=数据包大小;
addressEncryptedPacket=EncryptedPacket+2;
//在循环到DecryptedPacket缓冲区的结尾之前跳过DecryptedPacket的前2个字节。
//逐字节处理转换。

对于(DecryptedPacketa=&DecryptedPacket+3;//
DecryptedPacketa
的类型为语句中定义的
int

int DecryptedPacketa;
但是您正在为它分配一个指针。同样,您正在将它与循环条件中的指针进行比较。这就是为什么您会收到这些警告

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

unsigned char *DecryptedPacketa;

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

{ 
    // loop body
}
unsigned char*DecryptedPacketa;
对于(DecryptedPacketa=DecryptedPacket+2;
DecryptedPacketa

你需要在开始时跳过两个字节。因此,你应该从
DecryptedPacket+2
开始循环。另外,请注意函数参数
DecryptedPacket
已经是一个指针。你不需要对它应用
操作符
&
地址。

嗯,你不是指
吗(char*d=DecryptedPacket+3;d
?为什么要输入操作员的地址?顺便说一句,这跳过了3个字节,但您的注释是“跳过前2个字节”。你到底想做什么?为什么你要把
DecryptedPacket
的地址加上3到指针的指针,然后把它存储在一个int中?哦,是的,它从第3个字节开始,据我所知,它跳过了2。我猜它跳过了3。是的,我添加了那些地址操作符,试图消除它们不存在的警告。我想我是的必须获取变量的地址,并从起始地址到地址+packetSize作为结束使用。我认为地址与索引相同,只是更大的数字?我明白了。它已经是地址了。所以我一定是从地址值中获取了一个地址到某个未知位置,对吗?对不起,我之前从未使用过C/C++等等,这不是吗t增加4个字节而不是逐字节操作?或者这无关紧要?因为我将它向下转换为字节?或者每次都会丢失3个字节?@user3435580是的,你是对的。递增
DecryptedPacketa
将使它指向下一个元素。它将指向
sizeof(int)
(在你的例子中是4)个字节,远离前一个内存位置。诸如此类,谢谢,阿杰,我只是感到困惑,在循环开始之前,它已经跳过了+2(3个字节),然后从+3(4个字节)开始我想。不管怎样,我都可以通过逐行调试来解决这个问题。谢谢你所做的一切。我想我应该把它转换成使用array box的[2][3]哈哈,这让我的大脑更容易理解这些东西。@user3435580是的,使用数组下标操作符
[]
可以让代码更清晰、更可读。我建议使用它。
unsigned char *DecryptedPacketa;

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

{ 
    // loop body
}