C++ 正则表达式 sscanf

C++ regular expression sscanf

我想使用 sscanf 提取字符串中的第 2 个整数(5 和 10) RSSI = 5 误码率 = 10 像这样:

#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

int main() {

  std::string  str = "\r\n+CSQ: 5,10\r\n\r\nOK\r\n7556\r\n";
  unsigned char lBufRX[100];
  char *rssi, *ber;

  if((sscanf(str.c_str(), "%*[^:]: %s,%s[^\n]", rssi, ber)) != 2) {
    std::cout <<"[" << rssi << "]" << "[" << ber << "]"  << std::endl;
  } 
  
  return 0;
}

结果很糟糕。谁能帮帮我?

我的输出是:“[5,10][”和“%*[^:]:”我一直读到第一个整数,所以“5”和“,%s[^\n]”我读了第二个整数所以 "10" 直到 \r\n

谢谢

您有几个错误。尽管您想阅读两个 int,但您正在使用 char*。但是你不会为它们分配内存。此外,您期待两次成功的解析,但请检查 != 2。这是一些有效的代码:

int main() {

  std::string  str = "\r\n+CSQ: 5,10\r\n\r\nOK\r\n7556\r\n";
  int rssi, ber;

  if((sscanf(str.c_str(), "%*[^:]: %d,%d", &rssi, &ber)) == 2) {
    std::cout <<"[" << rssi << "]" << "[" << ber << "]"  << std::endl;
  } 
  
  return 0;
}