c - 在微控制器中复制c中的字符串
问题描述
我有一个"Revision: BG96MAR02A07M1G"
存储在 char tempdata[512] 中的字符串
我正在尝试仅解析和复制那部分BG96MAR02A07M1G
这就是我所做的,但是我在firmwareVersion 中得到了垃圾值
signed char updateBG96FirmwareVersion(int timeout)
{
char firmwareVersion[24];
char *ret = NULL;
if (GSMCommand("I", tempdata, timeout) != AT_OK)
return FEHLER;
ret = strstr(tempdata, "Revision:");
if (ret)
{
strncpy(firmwareVersion, tempdata+9, 24);
firmwareVersion[sizeof(firmwareVersion)] = '\0';
}
else
return FEHLER;
}
解决方案
你可以这样做:
#include <string.h>
#define FEHLER 123 // ?
#define SUCCESS 0
signed char updateBG96FirmwareVersion(int timeout)
{
char firmwareVersion[24];
char* ret = NULL;
#if 1
char tempdata[] = "Revision: BG96MAR02A07M1G"; // Test data for my test
#else
if (GSMCommand("I", tempdata, timeout) != AT_OK)
return FEHLER;
#endif
const char revision[] = "Revision: ";
ret = strstr(tempdata, revision);
if (ret)
{
strcpy(firmwareVersion, tempdata + strlen(revision));
return SUCCESS;
}
else
return FEHLER;
}
int main() // main function initializing here
{
updateBG96FirmwareVersion(0);
}
这假定修订字符串BG96MAR02A07M1G
永远不会超过 24 个字符。否则,您可能应该strncpy
手动使用和终止字符串 0。
推荐阅读
- spring-boot - 将实体分配给持久性单元(spring-boot,spring-data-jpa)
- autohotkey - 在按下其他键时发送一个键不会向按下的键发送垃圾邮件
- flutter - Flutter PointerEvent vs OnTap,一个有效,另一个无效
- ember.js - 仍在检索时导航时出现模型问题
- java - 当我尝试创建我的 Android 项目时显示错误
- c++ - 为什么是 numeric_limits
::max() 不等于 -1? - java - 编写正确的 jUnit 测试
- c++ - 为什么没有一个 istream get 函数在这个 c 字符串中存储任何东西?
- java - Spring Batch中的执行批处理文件
- python - TypeError:“numpy.bool_”对象不可迭代