我想将指针传递给一个函数,然后将该指针传递给另一个指向数组的函数,并在该函数结束后读取调用方函数中的值。
这是示例代码,我希望它如何工作:
<bean id="myDeadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
<property name="deadLetterUri" value="activemq://my_dlq"/>
</bean>
<bean id="myProcess" class="mapper.MyProcess" />
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<route errorHandlerRef="myDeadLetterErrorHandler">
<from uri="activemq://my_test"/>
<process ref="myProcess" />
<to uri="http://localhost:3000"/>
</route>
</camelContext>
要执行fun_1功能,我想传递静态char * resp,并在fun_3结束后我想要缓冲区的地址,然后从中读出,但是现在当fun_3结束时,resp始终为NULL。
答案 0 :(得分:2)
C是按值传递。在函数内分配给局部变量是瞬时的,效果不会传递给调用者的参数变量。
在您的情况下,我怀疑您不想使用分配,而是使用strcpy
或memcpy
将缓冲区复制到调用代码提供的缓冲区中。 / p>
但是请注意,调用代码会分配足够大的缓冲区,并使调用者传递缓冲区大小,以免覆盖可用空间:
static bool fun_3(const char *data, size_t size) {
char buffer[20];
if (size < sizeof buffer) return false;
/* some code */
memcpy(data, buffer, sizeof buffer);
return true;
}
char buffer[25];
bool success = fun_3(buffer, sizeof buffer);
或者,如果您真的要返回指向本地静态变量的指针(但请仔细考虑其含义!尤其是线程安全性),您可以选择
返回指针:
char *fun_3() {
static char buffer[20];
/* some code */
return buffer;
}
char *buffer = fun_3();
通过指针传递:
static bool fun_3(const char **data) {
static char buffer[20];
/* some code */
*data = buffer;
return true;
}
char* buffer;
bool result = fun_3(&buffer);