【发布时间】:2019-01-29 01:22:25
【问题描述】:
我有以下我想通过引用传递的结构
typedef struct payload {
char *payload;
uint64_t payloadSize;
} Payload;
以下是该方法的实现。
void parsePayload(const char *originalPayload, const int payloadSize, Payload *source) {
source->payloadLength = 5;
source->payload = malloc(5 * sizeof(char));
memcpy((void *)source->payload, originalPayload, 5);
}
这里有主函数,我想通过修改指针内容的方法传递分配的对象
int main() {
Payload *sourcePayload = malloc(sizeof(Payload));
parsePayload("some random char", 16, &sourcePayload);
Log("%d", sourcePayload->payloadSize);
}
但是,当我记录 payloadSize 时,输出似乎有问题。请指出我做错了什么。
提前致谢!
【问题讨论】:
-
你的编译器警告肯定已经告诉你错误了吗?
-
您声明了
Payload *sourcePayload,所以sourcePayload已经是Payload *类型——为什么要使用它的地址? (仅当传递Payload **以允许在函数内realloc而不返回值时才需要)使用 gcc/clang 将-Wall -Wextra -pedantic(至少)添加到您的编译器字符串,对于 VS 添加/W3,并且不接受代码直到它在没有警告的情况下编译。让编译器帮助您编写更好的代码。 (它在日志运行中节省了大量时间) -
附带说明,C 仅具有传递值。 c-faq.com/ptrs/passbyref.html
-
通过转换 memcpy 的参数来取消不转换 malloc 的布朗尼点
标签: c pass-by-reference