Programación General > C/C++
error grave en programa
winnipu:
Vereis he hecho un programa para que se conecte a un ftp y se descargue un archivo en una determinada carpeta. Al compilar compila bien, y hace lo que se le pide, si bien despues de unos segundos de ejecucion sale una ventana de windows diciendo error grave el programa debe cerrarse. Os pego el code a ver si alguien sabe a que puede ser debido:
--- Código: C++ --- #include <windows.h>#include <wininet.h>#include <string.h> #define RARCHIVO "index.html" int main(){ char* dir=getenv("windir"); //obtiene el path de windows strcat(dir,"\System32\"); //agrega System32 al path queda por ejemplo c://windows/system32 strcat(dir,RARCHIVO); // c://windows/system32/index.html HINTERNET hInternet, hServer; ShowWindow(GetForegroundWindow(),SW_HIDE); hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hServer = InternetConnect(hInternet, "ftp.usuarios.hispa.es", INTERNET_DEFAULT_FTP_PORT, "user", "pass", INTERNET_SERVICE_FTP, 0, 0); FtpGetFile(hServer, RARCHIVO, dir, 0, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0); InternetCloseHandle(hInternet); InternetCloseHandle(hServer); return 0;}
m0skit0:
Depura e indica en qué línea tienes el problema.
winnipu:
El problema es que el compilador no me arroja errores. Compila bien con dev cpp. Pero si ejecuto el exe resultante, descarga el archivo en la ruta correcta, pero despues al poco rato salta un mensaje de windows, error grave al ejecutar el programa. El programa debe cerrarse. Notificar o no notificar error.
Eso es lo que me mosquea, hace su labor, pero luego da un error, despues de ejecutado y con el archivo transferido correctamente. No se a que se debe. Tampoco he probado otros compiladores.
m0skit0:
Entiendo que no haya errores de compilación. Eso no implica que no haya errores de ejecución. Por eso debes lanzarlo en modo depuración y ver dónde lanza el error.
winnipu:
El problema es que al ejecutar el programa se produce un buffer overflow, debido a strncat y que no lo manejo adecuadamente. Pero sinceramente no se como corregirlo. He probado usando strncat que en teoria es mas seguro. Con el se acabo el bufferoverflow pero sin embargo no logro descargar el archivo en la ruta adecuada. Pego codigo del ultimo intento:
--- Código: C++ ---#include <windows.h>#include <wininet.h>#include <string.h> #define RARCHIVO "index.html" int main(){ char dir[100]; strncat(dir, getenv("windir"), 15); //obtiene el path de windows strncat(dir, "\System32\", 15); //agrega System32 al path queda por ejemplo c://windows/system32 strncat(dir, RARCHIVO, 15); // c://windows/system32/index.html HINTERNET hInternet, hServer; ShowWindow(GetForegroundWindow(),SW_HIDE); hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hServer = InternetConnect(hInternet, "ftp.usuarios.hispa.es", INTERNET_DEFAULT_FTP_PORT, "user", "pass", INTERNET_SERVICE_FTP, 0, 0); FtpGetFile(hServer, RARCHIVO, dir, 0, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0); InternetCloseHandle(hInternet); InternetCloseHandle(hServer); return 0;}
Navegación
[#] Página Siguiente
Ir a la versión completa