【问题标题】:Version number as a string getting truncated to single number版本号作为字符串被截断为单个数字
【发布时间】:2021-10-29 09:34:31
【问题描述】:

C 中的问题

我收到一个串行字符串,它是 7.0.0*(crlf)

当我将上面的字符串复制到另一个字符串中并去掉我不想要的字符时,字符串是 7.0.0(由于我的复制循环中的调试输出,我知道它正在复制所有 5 个字符)。

当我 printf("%s",myvalue) 返回字面意思是 7,而不是 7.0.0

我需要能够保持整个字符串完整,以便 myvalue 显示/输出 7.0.0,而不是 7。

我该怎么做??

无符号整数 ESPFWVERSION[10] ;

   SendATandExpectResponse("AT+VERSIONINFO2", "OK");
   sprintf(ttlbuffer, "%s\r\n",RESPONSE_BUFFER);
   SendStringSerially(ttlbuffer);    
    int j=0;

    for (int i = 0; RESPONSE_BUFFER[i]!='*'; i++)
    {
           chR = RESPONSE_BUFFER[i] ;
             ESPFWVERSION[j] = chR;     
             j++;

   sprintf(ttlbuffer, "j=%i \r\n",j);
   SendStringSerially(ttlbuffer);           

    }
    
   // strcpy_s(ESPFWVERSION, j, RESPONSE_BUFFER);
    ESPFWVERSION[j+1] = '\0';        

   sprintf(ttlbuffer, "(%s)\r\n",ESPFWVERSION);
   SendStringSerially(ttlbuffer);           

输出来自:sprintf(ttlbuffer, "%s\r\n",RESPONSE_BUFFER); SendStringSerially(ttlbuffer);
是 7.0.0*crlf

最后一条命令的输出是 (7)crlf

【问题讨论】:

  • 如果调试信息和打印的输出不匹配......你要么做错了(可能)......或者做的比你说的多(可能)......或者你在您的实现中存在错误(极不可能)。 注意第 42 行 :-)
  • 如何接收字符串?更重要的是,你如何stripcopy 字符串?请尝试创建minimal reproducible example 向我们展示。
  • 您需要发布您的实际代码。
  • 谢谢-我修改了我上面的帖子
  • unsigned int ESPFWVERSION[10] ;sprintf(ttlbuffer, "(%s)\r\n",ESPFWVERSION); 不匹配

标签: c string parsing


【解决方案1】:

我的变量类型有误。

unsigned int ESPFWVERSION[10] ;

改成

unsigned char ESPFWVERSION[10] ;

现在已经修复了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-05
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2011-01-10
    • 2017-03-12
    相关资源
    最近更新 更多