Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在函数中传递指向char的指针并在调用者中读取值_C++_C - Fatal编程技术网

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

C++ 在函数中传递指向char的指针并在调用者中读取值,c++,c,C++,C,我想把指针传递给一个函数,这个函数把这个指针传递给另一个函数,这个函数指向数组,在这个函数结束后,我想读取调用者函数中的值 这是我希望它如何工作的示例代码: void fun_1(const char *data) { /* some code */ fun_2(data); } void fun_2(const char *data) { /* some code */ fun_3(data); } static bool fun_3(const char *data) {

我想把指针传递给一个函数,这个函数把这个指针传递给另一个函数,这个函数指向数组,在这个函数结束后,我想读取调用者函数中的值

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

void fun_1(const char *data)
{
  /* some code */
  fun_2(data);
}

void fun_2(const char *data)
{
  /* some code */
  fun_3(data);
}

static bool fun_3(const char *data)
{
  static char buffer[20];
  /* some code */
  data = buffer;
  return true;
}

要运行fun_1,我要传递静态字符*resp,在fun_3结束后,我要有缓冲区的地址,然后从中读取,但现在当fun_3结束时,resp总是空的。

C是按值传递的。赋值给函数内部的局部变量是暂时的,效果不会传递给调用方的参数变量

在您的情况下,我怀疑您不想使用赋值,而是使用
strcpy
memcpy
将缓冲区复制到调用代码提供的缓冲区中

请注意,调用代码分配了足够大的缓冲区,并使调用方传入缓冲区大小,以避免覆盖可用空间:

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 *fun_3() {
      static char buffer[20];
      /* some code */
      return buffer;
    }
    
  • 通过指针传递:

    static bool fun_3(const char **data) {
      static char buffer[20];
      /* some code */
      *data = buffer;
      return true;
    }
    

C是传递值。赋值给函数内部的局部变量是暂时的,效果不会传递给调用方的参数变量

在您的情况下,我怀疑您不想使用赋值,而是使用
strcpy
memcpy
将缓冲区复制到调用代码提供的缓冲区中

请注意,调用代码分配了足够大的缓冲区,并使调用方传入缓冲区大小,以避免覆盖可用空间:

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 *fun_3() {
      static char buffer[20];
      /* some code */
      return buffer;
    }
    
  • 通过指针传递:

    static bool fun_3(const char **data) {
      static char buffer[20];
      /* some code */
      *data = buffer;
      return true;
    }
    

分配给(非引用)参数在函数之外没有任何影响-指针没有什么特别之处。您需要使用与修改
int
相同的方法。欢迎使用StackExchange。您需要问一个特定的问题,因为这不仅仅是一个您可以要求他人为您编写代码的地方。您认为您的代码有什么问题?如果要修改函数中的指针,需要向其传递指向指针的指针。@Pam…或指向指针的引用(例如:
void fun_1(const char*&data)
)。在C++中,我更喜欢引用C和C++是不同的语言,对这个问题有不同的解决方法。您想要哪种语言?分配给(非引用)参数在函数之外没有任何影响-指针没有什么特别的。您需要使用与修改
int
相同的方法。欢迎使用StackExchange。您需要问一个特定的问题,因为这不仅仅是一个您可以要求他人为您编写代码的地方。您认为您的代码有什么问题?如果要修改函数中的指针,需要向其传递指向指针的指针。@Pam…或指向指针的引用(例如:
void fun_1(const char*&data)
)。在C++中,我更喜欢引用C和C++是不同的语言,对这个问题有不同的解决方法。你问哪种语言?既然问题被标记为C++,人们还可以提到“顺便引用”。通过返回值限制返回数据,并留下参数输入,除非有压倒性的性能问题。既然问题被标记为C++,也可以提到“顺便引用”。通过返回值限制返回数据,并将参数留待输入,除非存在严重的性能问题。