如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?

How to return the real value (unsigned char array in my case) and not a pointer from a function in C++?

本文关键字:字符 数组 C++ 指针 函数 无符号 返回 何返回 我的      更新时间:2023-10-16

首先,我正在使用C++,我是新手。我有一个接口,公开了一个方法unsigned char * readRequest().我所有的类都继承了这个接口,并以它的方式实现unsigned char * readRequest()(处理浮点数、字符串、整数、双精度、字符(,但返回unsigned char *。以下是我对将浮点数转换为unsigned char *readRequest()的一些实现。 编辑:我返回一个指向局部变量的指针,这是一个未定义的行为。如何返回C++中的实际值?

unsigned char * readRequest() {
float preCent = distanceCentimeters();
std::cout << preCent << std::endl; // print correct result
unsigned char buf[4];
memcpy(buf, &preCent, sizeof(preCent));
float result;
memcpy(&result, buf, sizeof(result));
std::cout << result << std::endl; // print correct result
return buf;
}
int main(void) {
unsigned char *readRequestArray;
readRequestArray = (unsigned char*) readRequest();
float converted_back;
memcpy(&converted_back, readRequestArray, sizeof converted_back);
std::cout << converted_back; // ERROR due to return a pointer to local variable
}

输出和错误:

24.2882
jN�A 
Segmentation fault

您返回的指针指向局部变量。这不起作用,将由编译器在警告中引发。

分配数据并返回唯一指针,或者只是使用字符串,因为您将内存管理传递给调用方。你在C++,使用C++样式代码,而不是C(printf和其他(。