2016-12-15 46 views
0

我已经完成我的搜索,并看到很多问题解决了关于指针的警告没有演员,但之后,我无法解决我的问题,我仍然不明白我的警告。C警告,lcrypto库。使从整数没有演员和其他人的指针

所以这里是我的代码的一部分:

RSA *rsa_private; 
      . 
     more code 
      . 
    rsa_private = PEM_read_bio_RSAPrivateKey(bio_private, NULL, NULL, NULL); 

在这里,我有以下警告:

然后我试图解决我的问题是这样的:

rsa_private = (RSA*) PEM_read_bio_RSAPrivateKey(bio_private, NULL, NULL, NULL) 

(试图解决这样的问题,因为te函数看起来像:RSA *PEM_read_bio_RSAPrivateKey,并且因为它返回RSA *我试图做的是铸造)

,然后我的警告开始是:cast to pointer from integer of different size [-Wint-to-pointer-cast]

好我的观点是,为什么我收到的第一个警告? rsa_privateRSA *和函数返回RSA *,是不是它是同一类型? 然后,当我把这个演员表为什么我也得到这个警告? (从未见过)

我该如何纠正我的警告?

+2

你是否包含正确的头文件来获得'PEM_read_bio_RSAPrivateKey'看起来你的编译器不知道它,所以它认为它正在返回一个'int' – John3136

+1

添加一个转换是*不是正确的解决方案;它只是掩盖了警告,比如将磁带放在汽车仪表板上的“检查引擎”指示灯上。如果你没有'#include'声明'PEM_read_bio_RSAPrivateKey'的头文件,那么你的编译器*应该*已经警告过你调用一个未声明的函数。了解如何启用该警告。然后确保你已经包含了正确的头文件。 –

+0

我看到它是有道理的,我会检查我的标题并做一些测试,我会尽快反馈! –

回答

0

正如我们可以从评论中读取的,添加演员并不是警告的正确解决方案。

而且我的编译器认为,PEM_read_bio_RSAPrivateKey将返回一个int(在评论为正确说),所以错误是我的程序缺少#include <openssl/pem.h>,现在编译器知道该函数返回一个RSA *作为rsa_private也是RSA *不再显示警告。

相关问题