c - GCC和Arduino中的函数指针不同的行为
问题描述
在我的 C 程序中,我有一个命令解释器的框架。它在 Linux/GCC 上运行良好,但在 Arduino 中它不会返回预期的结果。
下面找到PC代码。我对 Arduino 进行了适当的更改,除了返回字符串外它都可以工作(请参见清单底部的第二行)。
PC上的C代码(工作):
#include <stdio.h>
char* help(char *s){
char *helpString="This is the help string\n";
return helpString;
}
typedef struct {
const char* command;
char* (*cmdExec)(char *s);
}S_COMMAND;
S_COMMAND cmdTable[]= {
{"he", help}
};
int main(void){
char *text;
printf("\n%s\t",cmdTable[0].command); // returns "he"
text = (cmdTable[0].cmdExec)("0");
/* returns help string on PC as expected, but garbage on Arduino */
printf("\n%s", text);
}
解决方案
感谢您的建议。我修改了如下代码(查看 Node.JS),现在在两个平台上都可以正常工作。
int help(char *req, char *res){
strcpy(res, "This is the help string...\n");
return 0;
}
typedef struct {
char* command;
int (*cmdExec)(char *request, char *result);
}S_COMMAND;
S_COMMAND cmdTable[]= {
{"he", help}
};
int main(void){
char text[20];
cmdTable[0].cmdExec("0", text);
}
推荐阅读
- javascript - 如何将优惠券添加到条纹结帐
- c# - 从正文接收 JSON 并对其进行迭代
- microsoft-graph-api - 带有 HTTP 状态 200 响应的 Microsoft Graph 的 One Drive 内容 API
- websocket - 在 Julia 中使用 Websocket 时遇到问题
- java - 为什么 Apache 项目对 Java 版本敏感?
- javascript - 当改变一个模块对象时,为什么花括号导入没有改变?
- android - MediaFilePicker 总是显示空目录
- r - 在ggplot上绘制连接两点的线段
- javascript - Cloud Firebase 功能在本地工作,但在部署后不起作用
- swift - 滚动到顶部时,UIScrollView 出现故障和抖动