我对我正在使用的程序使用AT命令,并且无法使用sscanf()函数解析它们。似乎无法让sscanf()以我想要的方式工作
举例来说,如果我拿这个命令:
"AT\r\r\nOK\r\n"
我想: *在第一个呼叫,只得到“AT”的一部分,扔掉下面的“\ R”字符,知道到目前为止已经读了多少个字符。 *在第二次调用时,只获取“OK”部分,丢弃在“OK”字符串之前和之后出现的“\ r \ n”字符,并知道到那时已读取了多少个字符。
我写了下面的sscanf函数调用:
index = 0;
sscanf(buffer + index, "%*[\r\n]%[^\r]\r%*[\n]%n", new_buffer, &count);
index += count;
为什么不还给我要求的字符串?我究竟做错了什么?
非常感谢您的帮助。
感谢丹尼尔的帮助。 我不同意你写的一些东西。我同意你写的第一段。但是,在第二段中,我不认为(\ r)会使函数跳过所有跟在空白字符后面的字符。它只是让它跳过一个\ r字符。这就像写作:sscanf(缓冲区,“%* [^:]:”,它只会跳过一个':'字符,而不是所有的字符。 然后我添加了(%* [^ \ n])部分是因为某些命令行以“\ r”结尾,有些以“\ r \ n”结尾,我想跳过这两个文件。 – LinkOfTime
问题在于,令牌末尾的%n会将count ,并且什么都不读入到new_buffer。 – LinkOfTime
好的,我再次测试了它,并且我同意你的说法。它确实对待'\ r'字符与':'字符不同。问题是,我该如何解决它? 例如,在这样的文字: “AT \ r \ r \ NOK \ r \ n” 个 我希望它读 “AT \ r” 第一次和“\ r \ NOK \ r \ n“,我怎样才能将'\ r'与后面的'\ r \'分开? – LinkOfTime