[C con Clase] Extraño problemas con sprintf()

Programante programante en gmail.com
Sab Oct 24 00:53:00 CEST 2009


tttony escribió:
> Hola, el programa compilar todo bien sin nigun error, el problema es el comportamiento del sprintf() en esta linea:
>
> sprintf_s(pOutMessage, 100, _T("%u of %u"), TotalBytesTransferred.QuadPart, TotalFileSize.QuadPart);
>
> La variable pOutMessage = 65536 of 0
>
> No deberia de darme cero en el segundo parametro ya que cuando lo depuro tiene un valor que no es cero, en este caso es el tamaño del archivo, mira este sreenshot:
>
> aqui TotalFileSize.QuadPart no es cero:
> http://www.subirimagenes.com/imagen-vc1-3404275.html
>
>
> saludos
El error lo tienes con el tamaño de los parámetros.
Un QWORD ocupa 8 bytes. El formato %u toma valores de tipo entero, lo
que en ordenadores modernos son 4 bytes.
El primer %u está tomando la parte baja de TotalBytesTransferred y el
segundo %u la parte alta de TotalBytesTransferred (por eso te sale a 0).

TotalFileSize no es leído en ningún momento por el sprintf_s

Cambia el mensaje a "%I64u of %I64u" para indicarle que los parámetros son de 64 bits. (I64 es un indicador de formato no estándar de Microsoft, en las librerías de Unix usarías %llu).






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