gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:46:06 25 4
gpt4 key购买 nike

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

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

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,我想传递 static char *resp,在 fun_3 结束后,我想获得缓冲区的地址,然后从中读出,但现在当 fun_3 结束时,resp 始终为 NULL。

最佳答案

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

在你的情况下,我怀疑你不想使用赋值,而是使用 strcpymemcpy 将缓冲区复制到提供的缓冲区中通过调用代码。

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

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);

关于c++ - 在函数中传递指向 char 的指针并在调用者中读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56886450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com