scanf/sscanf可以处理转义字符吗?

Fra*_*ert 4 c c++

int main()
{
  char* a = " 'Fools\' day' ";
  char* b[64];
  sscanf(a, " '%[^']s ", b);
  printf ("%s", b);
}

--> puts "Fools" in b
Run Code Online (Sandbox Code Playgroud)

显然,我希望b中有"愚人节" .我可以告诉sscanf()不要将转义的撇号视为字符序列的结尾吗?

谢谢!

Rob*_*edy 8

不.这些功能只是阅读普通的旧字符.它们不会根据任何转义规则解释内容,因为没有什么可以逃脱 - 引号,撇号和反斜杠在输入字符串中并不特殊.

你将不得不使用其他东西来解析你的字符串.您可以编写一个小状态机来一次读取一个字符串,跟踪前一个字符是否为反斜杠.(不要只是扫描到下一个撇号,然后向后看一个字符;如果你被允许逃避反斜杠和撇号,那么你最终可能会重新扫描一直回到字符串的开头看你是否有一个奇数偶数的转义字符.总是向前解析字符串,而不是向后解析字符串.)