我對我正在使用的程序使用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