[C con Clase] especificador de formato %n

José Luis Torre joseluistorrehernandez en gmail.com
Dom Sep 30 18:23:37 CEST 2012


Yo lo he probado con el siguiente código y no funciona ya que el valor
que produce no tiene nada que ver
es 1990858644.

Por otro lado, he incluido la bibliteca <windows.h> pero no reconoce a
esta función.

El código es el siguiente:

#include <stdio.h>
#include <windows.h>

int main() {

    int numChars;
    int a = 1;
    int b = 12;
    int rta ;

    // _set_printf_count_output( 1 );

    SetConsoleOutputCP(1252);
    rta = printf("%d %d.%n", a, b, &numChars);
    if (rta == -1)
    {
       printf("\nla función printf() se ha ejecutado incorrectamente.\n");
    }
    else
    {
       printf("\nThe above line contains %d characters.\n", numChars);
       printf("rta == %d\n", rta);
    }
    system("pause");

    return 0;
}

Similar, salvo que he puesto un . para ver dónde terminaba la salida,
y he intentado recibir el número de caracteres mediante el valor que
retorna la función.

Por lo que entiendo en numChars se debería almacenar el valor 5.

Saludos
José Luis



El día 30 de septiembre de 2012 00:43, cesar arias
<sinatra435 en hotmail.com> escribió:
>
>
>> Date: Sat, 29 Sep 2012 17:06:14 -0400
>> From: srd4121 en njit.edu
>> To: cconclase en listas.conclase.net
>> Subject: Re: [C con Clase] especificador de formato %n
>
>>
>> Hola César,
>>
>> 2012/9/29 cesar arias <sinatra435 en hotmail.com>:
>> > Hola, me ayudan a utilizar el especificador de fomato %n. Tengo el
>> > siguiente
>> > codigo, pero no muestra el resultado que esperaba:
>> >
>> > #include <stdio.h>
>> >
>> > int main() {
>> >
>> > int numChars;
>> > int a = 1;
>> > int b = 12;
>> >
>> > printf("%d %d %n", a, b, &numChars);
>> > printf("\nThe above line contains %d characters.", numChars);
>> >
>> > return 0;
>> > }
>> >
>> > Se supone que numChars almacena la el numero de caracteres escritos asta
>> > donde esta %n, pero no es lo que sucede.
>> >
>>
>> El problema es que estás usando la versión de 'printf()' de MS-Windows
>> Vista/7. Para arreglar un problema de seguridad usando %n, por
>> defecto, su versión de 'printf()' ignora %n. Si quieres habilitar este
>> especificador, entonces tienes que invocar la función,
>> '_set_printf_count_output()', de MS-Windows, con un entero distinto de
>> 0 (cero). Por ejemplo,
>>
>>
>> int main()
>> {
>> _set_printf_count_output( 1 );
>> ...
>> printf( "%d %d %n", a, b, &numChars );
>> ...
>> }
>>
>> Y ahora funcionará debidamente. Claro que en otras plataformas, esto
>> no es un problema.
>>
>> Ahora bien, con el ejemplo que has puesto, puedes guardar el entero
>> retornado por 'printf()' para saber la cantidad total de caracteres
>> impresos.
>>
>>
>> Espero que esto aclare la duda.
>>
>> Steven
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>
> Lo del problema de seguridad lo explica todo.
>
> Trato de utilizar la funcion '_set_printf_count_output()' pero me sale un
> mensaje que dice que esta indefinida.
>
> NOTA: estoy utilizo el compilador Dev C++.
>
> Grasias.
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ



-- 
José Luis Torre
ww.ehu.es




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