[C con Clase] Mascara para sscanf

Steven Richard Davidson stevenrichard.davidson en gmail.com
Mar Ene 15 13:19:22 CET 2008


Hola Adrián,

2008/1/14 Adrian Ferreres Esteller <raro82 en hotmail.com>:
>
>  Hola lista:
>
>    No, si la funcion strtok ya la conocia, la cosa es que resulta que el
> código que estoy tratando es bastante extenso y esa llamada a la funcion
> sscanf con esa mascara se usa en muchas lineas y en diferentes funciones.
> Por supuesto la mascara es una constante definida en un .h por lo tanto lo
> mas comodo y lo que implicaba tocar menos codigo es cambiar la mascara en
> las cabeceras.... ahora si me decis que no hay mascara posible me tendre que
> meter en el código y modificarlo.
>

Bueno, pues haciendo algunas pruebas, tengo que decirte que no he
tenido muchos problemas, al menos no los que has expuesto. Sí
aconsejaría modificar algo de tu código. Éste es el código de prueba
que hice:

#include <cstdio>

using namespace std;

int main()
{
  const char szOrigen[] =
"hasaslfjkalfjaldfjalñfkaj?\nañlfjkañlfjañlfjafkljasfkl?\nafkljañlfjañlfjafdfljañlfjadflaj?\n";
  char szDestino[1024] = "";

  int c=0, a=0;
  for( int n=0; EOF != c && n < sizeof szOrigen; n++ )
  {
    if( (c = sscanf( szOrigen+n, "%[^?\n]%n", szDestino, &a )) > 0 )
    {
      printf( "\"%s\"\n", szDestino );
      n += a;
    }
  }

  puts( "\nSaliendo..." );
  getchar();
  return 0;
}

Como puedes ver, he usado el especificador %n para obtener la cantidad
de caracteres guardadas, hasta el momento. Este valor es guardado en
la variable 'a' para incrementar correctamente la variable 'n' la cual
sirve de índice o desplazamiento a 'szOrigen'. También date cuenta del
incremento de 'n' en cada iteración para poder saltarnos ese carácter
que hizo detener la lectura de 'sscanf()', que en el ejemplo anterior
puede ser '?' o incluso '\n'.


Espero que esto te ayude.

Steven




Más información sobre la lista de distribución Cconclase