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; }
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++,也可以提到“顺便引用”。通过返回值限制返回数据,并将参数留待输入,除非存在严重的性能问题。