如何解决在c中引用双指针的属性
我用C语言编写的一个函数如下:
int filepath_from_request(obj **context) {
strncpy(*context->request_filepath,*context->request,1024));
}
obj
对象本身定义为
typedef struct obj {
int socket;
char request[1024];
char request_filepath[1024];
} obj;
...
obj *context = (obj *)malloc(sizeof(obj));
但是,以这种方式引用*context->request
会引发致命的编译时错误'*ctx' is a pointer; did you mean to use '->'?
。为什么会这样呢?在我看来,我正在引用分配了值的同一对象,但是很明显,我对双指针不了解。
解决方法
这只是运算符优先级的事情。考虑(* context)-> request或context [0]-> request,具体取决于您的情况。
, ->
运算符的优先级高于*
运算符。这意味着编译器正在将->
运算符应用于context
,这是无效的,因为它不是指向结构的指针。
您需要添加括号以使*
运算符直接应用于context
:
strncpy((*context)->request_filepath,(*context)->request,1024));
此外,您实际上不需要在这里进行额外的间接访问。您可以更改功能以使用obj *
:
int filepath_from_request(obj *context) {
strncpy(context->request_filepath,context->request,1024));
}
并更改通话以使其匹配。
,由于(*)的优先级高于(->),因此程序正在考虑
{
"Product": {
"price": 300.56,"detail": [
"eee","fff"
]
},"id": "d9c66062-63ce-4b64-8bbe-95dcbdcad16d","timestamp": 1600329425
}
为
strncpy(*context->request_filepath,*context->request
向您显示致命错误。您可以通过将括号应用为
来更改优先级strncpy(*(context->request_filepath),*context->request
您的工作完成了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。