gpt4 book ai didi

c - 错误: incompatible types when assigning to type ‘char *’ from type ‘digestInfo’

转载 作者:行者123 更新时间:2023-11-30 17:32:11 25 4
gpt4 key购买 nike

很明显,我是 C 编程新手。 (我了解其他语言,尤其是 PHP,但想尝试一下 C)。

我已经成功地将一些代码组合在一起,这些代码完全按照我想要的方式工作 - 现在我正在进一步扩展它 - 但我不知道如何做到这一点。

一些背景。我正在使用这个对象:

typedef struct
{
dsUint16_t stVersion;
... (omitted for clarity)
dsUint16_t objInfoLength;
char *objInfo;
... (omitted for clarity)
}ObjAttr;

对我来说, *ObjInfo 是一个可以用来存储一些数据的区域,它将是一个对象(结构?),所以我是通过 typedef 创建的:

typedef struct {
unsigned int stVersion ; /* structure version */
const EVP_MD *digest_id ; /* digest name */
unsigned char digest_value ; /* digest calculated value (Variable length) */
// ... /* in the future I may want to store something else */
} digestInfo ;

我在 .h 文件中包含此结构,以便可以在我的 2 个 .c 文件中引用它。

现在在 .c 文件中,我存储这些数据(最终存储在应用程序数据库中),我有以下代码:

...
ObjAttr objAttr;
digestInfo digestO;
...
memset(&digestO,0x00,sizeof(digestO));
digestO.stVersion = 1;
digestO.digest_id = EVP_get_digestbyname(digest);
...
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
digestO.digest_value = *md_value;

objAttr.objInfo = *digestO;
objAttr.objInfoLength = sizeof(digestO);

当我编译时,我收到此错误:

error: invalid type argument of ‘unary *’ (have ‘digestInfo’)

我知道它是因为我试图将digestInfo对象存储到一个char值中 - 我应该怎么做?

我尝试过组合

objAttr.objInfo = digestO;
objAttr.objInfo = &digestO;

但仍然会出现某种错误(尽管最后一个错误确实在编译时带有警告)。

我走的路正确吗? (基本上,我正在计算通过 STDIN(存储在应用程序中)传入的一些数据的 MD5,并且我想将哈希计算存储在 ObjAttr 的“objInfo”区域中。

我想包含所使用的算法(md5、sha1 等)以及生成的哈希值,这样当我检索该数据时,我可以重新运行摘要以确保我仍然获得相同的哈希值。

如果我能解决这个问题,有人介意给我指出正确的方向吗?

我首先使用 memset 将内存清零是否正确?

我是否应该担心这些变量(digest_id,digest_value)中的每一个都可能具有可变长度?

感谢您的帮助。

最佳答案

字段 objInfo 是一个 char 指针 (char*),因此您必须为其分配一个指针,该指针由“对象”上的 & 获取。因此 objAttr.objInfo = &digestO; 是最接近的尝试,但 &digest0 是指向digestInfo的指针,因此您可能需要更改

typedef struct
{
dsUint16_t stVersion;
... (omitted for clarity)
dsUint16_t objInfoLength;
char *objInfo;
... (omitted for clarity)
}ObjAttr;

typedef struct
{
dsUint16_t stVersion;
... (omitted for clarity)
dsUint16_t objInfoLength;
digestInfo *objInfo;
... (omitted for clarity)
}ObjAttr;

关于c - 错误: incompatible types when assigning to type ‘char *’ from type ‘digestInfo’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com