首页 > 解决方案 > 在微控制器中复制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;
}

测试

标签: c

解决方案


你可以这样做:

#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。


推荐阅读