c - 如何在C中返回缓冲区地址

标签 c microcontroller

我正在尝试创建一个函数,在 16 位微 Controller 的 RAM 中创建一个字符串。 函数原型(prototype)是这样的

char CID_Str[12] GetContactID(char Qual,long Event,char Partition,char Zone);

该函数应该返回一个使用输入参数创建的小字符串。

我以前从来没有做过这样的函数。 我不需要函数内部代码的帮助。 我需要知道应该如何声明返回参数(Buffer),因为 CCS 编译器不喜欢该原型(prototype)。

最佳答案

数组可以作为指向数组元素类型的指针返回。返回的指针将是数组(或内存区域)中第一个元素的地址。对于您的情况:

char *GetContactID(char Qual,long Event,char Partition,char Zone);

以及您的评论:

I just created a buffer inside the variable like this char ContactID[12]; then at the end of the function i have a return ContactID;

确保不要返回堆栈地址(例如局部变量地址)。这样的地址仅在函数范围内有效,如果返回给调用者,则变为无效(悬空)指针。主要选项有:

  1. 在函数中分配动态内存,并将其作为函数返回值或输出参数返回。调用者负责释放内存。
  2. 调用者传入内存地址。
  3. 使用静态内存。

前两种是常见情况。

更新:我错过了您在微 Controller 上运行的事实。在这种情况下,静态内存可能更合适,因为此类系统往往不希望动态分配的开销和复杂性。

关于c - 如何在C中返回缓冲区地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59059414/

相关文章:

c - 优化小尺寸的 C 代码 - 共享静态变量?

arm - ARM Cortex 中的事件和中断有什么区别?

c - ADXL345只读ceros

c - 以编程方式按下另一个应用程序(C,Windows)上的按钮

c - Strcmp 和 getchar

c++ - 使用 malloc/new 时无法编译 stm32l4r5xx

microcontroller - 学习 Verilog 的资源

c++ - 如何使用strcpy将字符串复制到字符数组中

带位图的控件

c - 小功能段错误