在函数中传递给char的指针并在调用者中读取值

时间:2019-07-04 10:56:44

标签: c++ c

我想将指针传递给一个函数,然后将该指针传递给另一个指向数组的函数,并在该函数结束后读取调用方函数中的值。

这是示例代码,我希望它如何工作:

<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。

1 个答案:

答案 0 :(得分:2)

C是按值传递。在函数内分配给局部变量是瞬时的,效果不会传递给调用者的参数变量。

在您的情况下,我怀疑您不想使用分配,而是使用strcpymemcpy将缓冲区复制到调用代码提供的缓冲区中。 / 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);