gpt4 book ai didi

c - 为什么 C 函数不使用 char** param 设置指向 char[] arg 的指针的值

转载 作者:行者123 更新时间:2023-12-02 08:40:03 25 4
gpt4 key购买 nike

我的源文件有一个函数,我在反序列化通过 C 套接字传递的结构的过程中调用了该函数(这是客户端源):

MY_STRUCT_TYPE myStructVar;

unsigned char * deserialize_chararr(unsigned char *buffer, unsigned char** value)
{
unsigned char val[256];
int i;
for(i = 0; buffer[i]; i++) {
val[i] = buffer[i];
}
val[i++] = '\0';
printf("\n chararr: %s :", val);

*value = malloc(i * sizeof **value);
for(i = 0; buffer[i]; i++) {
(*value)[i] = buffer[i];
printf("%c", (*value)[i]);
}
(*value)[i++] = '\0';
/* buffer contains a serialized struct read over a socket using recv.
so this call returns the buffer pointer that get's passed to the next deserialize_<type> invocation a la https://stackoverflow.com/a/1577174/434145
That's why the first string extraction followed by an attempt to set it in the struct as part of unpacking. */
return buffer + i;
}

我调用

buffer = deserialize_chararr(buffer, &myStructVar->szrecordid);

在哪里

typedef struct _MY_STRUCT_TYPE {
unsigned char szrecordid[28];
}

服务器发送数据正常,它甚至在上述函数中正确解析,但我似乎无法在我的结构的 String 变量中设置它。看到 this 后,我将函数更改为使用 char ** param , 但打印时还是有垃圾

printf("\n Payload:"  "\n szrecordid: %s ", myStructVar.szrecordid);

简而言之,我将一个指针传递给一个字符串 (&myStructVar->szrecordid),使用 malloc 并按字符分配我的指针字符(后一部分我从 link 获得)。在我将代码从使用 char * 更改为使用 char ** 之前和之后,我都遇到了相同的错误和编译器警告:

client.c:159: warning: passing arg 2 of `deserialize_chararr' from incompatible pointer type

那我做错了什么?

最佳答案

问题是指向数组的指针与指向指针的指针不兼容。它们是不同的东西。这也是一件好事,因为这是为了捕获代码中的错误。你所做的基本上是这样的:

unsigned char szrecordid[28];
szrecordid = malloc(i * sizeof **value);

你应该能看出问题所在;您正在尝试将指针分配给数组。

关于c - 为什么 C 函数不使用 char** param 设置指向 char[] arg 的指针的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392763/

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