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

Silvio S. Stenta silviostenta en hotmail.com
Mar Oct 20 15:02:05 CEST 2009


Ante todo soy nuevo en esto.

No me da ningún error de compilación, pero de todos modos no hay error en 
tiempo de ejecución porque el programa nunca entra a la parte del error que 
vos decis.
Hice paso a paso y nada.

El codigo que tenes en esa pagina es :

// vcMoveFileWithProgress.cpp: define el punto de entrada de la aplicación 
de consola.
//

#include "stdafx.h"
//#include <tchar.h>
#include <windows.h>

DWORD CALLBACK ProgressRoutine(
    LARGE_INTEGER TotalFileSize,
    LARGE_INTEGER TotalBytesTransferred,
    LARGE_INTEGER StreamSize,
    LARGE_INTEGER StreamBytesTransferred,
    DWORD dwStreamNumber,
    DWORD dwCallbackReason,
    HANDLE hSourceFile,
    HANDLE hDestinationFile,
    LPVOID lpData
)
{
    TCHAR* pOutMessage;

    switch (dwCallbackReason)
    {
    case CALLBACK_CHUNK_FINISHED:
		{
        pOutMessage = new TCHAR[100];

		//LONGLONG lltbtQuadpart = TotalBytesTransferred.QuadPart;
		//LONGLONG lltfsQuadpart = TotalFileSize.QuadPart;
		/** AQUI MAL HE PROBADO TOOOODO Y NADA **/
			sprintf_s(pOutMessage, 100, _T("%u of %u"), 
TotalBytesTransferred.QuadPart, TotalFileSize.QuadPart);
			/** pOutMessage = 65536 of 0 copied (No deberia de darme cero sino el 
tamaño total del archivo)**/
		/** AQUI MAL FIN **/

		/** AQUI BIEN **/
			TCHAR* szTemp = new TCHAR[32];
			sprintf(szTemp, _T("%d"), TotalBytesTransferred.QuadPart);
			sprintf(pOutMessage, _T("%s of %d copied"), szTemp, 
TotalFileSize.QuadPart);
			/** pOutMessage = 65536 of 15565272 copied (Aqui me da lo que quiero 
peero)**/
		/** AQUI BIEN FIN **/


        //MessageBox(NULL, pOutMessage, _T("Progress"), MB_OK);

        delete[] pOutMessage;
		delete[] szTemp;
        break;
		}
    case CALLBACK_STREAM_SWITCH:
        pOutMessage = new TCHAR[100];

		/** AQUI TAMBIEN ME PASA LO MISMO TENGO QUE COPIAR EL VALOR A UNA VARIABLE 
**/
        sprintf(pOutMessage, _T("%d of %d from stream %d has been copied."), 
StreamBytesTransferred.QuadPart, StreamSize.QuadPart, dwStreamNumber);
        //MessageBox(NULL, pOutMessage, _T("Progress"), MB_OK);

        delete[] pOutMessage;
        break;
    }

    return PROGRESS_CONTINUE;
}


int _tmain(int argc, _TCHAR* argv[])
{

	TCHAR* szSourceFilePath = _T("G:\\Descargas\\AdbeRdr910_es_ES.exe");
	TCHAR* szDestFilePath = _T("C:\\TEMP.alf");

	BOOL rtn = CopyFileEx( szSourceFilePath, szDestFilePath, ProgressRoutine, 
NULL, FALSE, NULL );
	DeleteFile( szDestFilePath );

	return 0;
}

--------------------------------------------------
From: "tttony" <jdeleca en yahoo.es>
Sent: Monday, October 19, 2009 9:12 PM
To: <cconclase en listas.conclase.net>
Subject: [C con Clase] Extraño problemas con sprintf()

> Hola buenas noches, tenia tiempo que no entraba aqui, normalmente solo 
> hago una cosulta cuando ya no le encuentro solucion a un problema y este 
> es el caso, quiero crearme una aplicacion que me ayude a copiar archivos 
> de un sitio a otro con algunas funciones extras, bien me he encontrado en 
> internet este ejemplo:
>
> http://pastebin.com/m4f7e3ff0
>
> En el link explico el problema ya que es complicado de explicar, me han 
> dicho que puede ser problemas con el 
> buffer(http://msdn.microsoft.com/en-us/library/8dbf701c.aspx) pero yo uso 
> VS2008 y lo tengo activado, tambien lo he probado con DEV-C++ y me da el 
> mismo problema..
>
> saludos
>
>
>
>
> ----
>
> en la programacion la teoria al final no es ni lo que era
> _______________________________________________
> 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
> 




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