C 使用strlib函数而不是字符比较是否有效?
我正在从事一个项目,该项目旨在实现微控制器和GSM模块之间的通信。微控制器在收到前一AT命令的真实响应后,立即向GSM模块发送下一AT命令 At命令响应的Sytnax如下所示:C 使用strlib函数而不是字符比较是否有效?,c,string,embedded,C,String,Embedded,我正在从事一个项目,该项目旨在实现微控制器和GSM模块之间的通信。微控制器在收到前一AT命令的真实响应后,立即向GSM模块发送下一AT命令 At命令响应的Sytnax如下所示: <CR><LF>RESPONSE<CR><LF> 这种方法非常有效。但我想确定使用strstr是否可行。因为第二种方法是在没有任何字符串函数的情况下逐个比较接收到的字符,但是编写它需要很长时间和混乱。数以百计的“其他”和“如果”。第一种方法简短而整洁 编辑:实际上我的问题
<CR><LF>RESPONSE<CR><LF>
这种方法非常有效。但我想确定使用strstr是否可行。因为第二种方法是在没有任何字符串函数的情况下逐个比较接收到的字符,但是编写它需要很长时间和混乱。数以百计的“其他”和“如果”。第一种方法简短而整洁
编辑:实际上我的问题很简单,但我不想让人觉得我没有研究算法。您只需跳过以上部分即可回答此问题:
我应该只使用strlib还是需要逐个比较接收到的字符以提高效率。除非您确实在搜索子字符串,否则应该使用
strcmp
而不是strstr
。效率更高,因为前者可以在出现任何字符不匹配时立即停止。除此之外,字符串函数应该适合您的用途,因为如果您是自己编写的,您基本上也必须这样做。除非您必须这样做,否则不要重新发明轮子。你有充分的理由不使用标准库吗?@kaylum实际上收到的字符串可能与“OK”不同。它不需要是完全相同的字符串。里面包含“OK”就足够了。例如,如果响应为“OK\r”,我就不能使用strcmp,对吗?只是想确定一下。正在搜索的子字符串是否总是在gsm\u字符串的开头?如果是这样,strncmp
应该比strstrstr
更有效,尤其是当子字符串不匹配时,因为匹配可能会立即失败,而不是搜索整个字符串。例如,if(strcmp(gsm_字符串,“OK”,2)==0){/*匹配“OK”*/}
@abdullahcinar strstr()工作正常。你可以使用它,你只是在它的控制信道上与一个简单而缓慢的gsm调制解调器通信,而不是每秒处理几GB的数据。它只会给你带来和你自己一样多的问题。
switch(CommandNumber)
{
case 0:
if(strstr(gsm_string,"OK") != NULL)
{
CommandNumber++;
GSM_SENDMESSAGE("AT+QIFGCNT=0");
}
break;
case 1:
if(strstr(gsm_string,"CONNECT") != NULL)
{
CommandNumber++;
gsm_send_message_CRLF("AT+QIMODE=0");
}
.
.
.
}