sscanf admite %n para contar cuántos bytes se leen.
¿Por qué sscanf a veces lee bytes adicionales?
#include <stdio.h> int main() { char *data = "X\n \n\x09\n \x10\n"; int len = 0; sscanf(data, "X%n", &len); printf("%i\n", len); sscanf(data, "X\n%n", &len); printf("%i\n", len); return 0; }Este programa imprime:
1 7Yo esperaría:
1 2 (1 para X y 2 para X\n .)
¿Por qué lee más bytes de lo esperado?
De cppreference :
La cadena de formato consta de
caracteres multibyte sin espacios en blanco excepto %: cada uno de estos caracteres en la cadena de formato consume exactamente un carácter idéntico del flujo de entrada, o hace que la función falle si el siguiente carácter en el flujo no se compara igual.
caracteres de espacio en blanco: cualquier carácter de espacio en blanco único en la cadena de formato consume todos los caracteres de espacio en blanco consecutivos disponibles de la entrada (determinado como si llamara a isspace en un bucle). Tenga en cuenta que no hay diferencia entre "\n", " ", "\t\t" u otros espacios en blanco en la cadena de formato.
Por lo tanto, su \n en la segunda cadena de formato hará que la función consuma todos los espacios en blanco restantes, que en realidad son los 6 caracteres que siguen a la X y preceden al 0x10 .