Lunes 16 de Diciembre de 2024, 02:26
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
error grave en programa
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: error grave en programa (Leído 2090 veces)
winnipu
Nuevo Miembro
Mensajes: 9
error grave en programa
«
en:
Martes 9 de Noviembre de 2010, 22:52 »
0
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;
}
Tweet
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: error grave en programa
«
Respuesta #1 en:
Miércoles 10 de Noviembre de 2010, 11:50 »
0
Depura e indica en qué línea tienes el problema.
Fr33k K0mpu73r
winnipu
Nuevo Miembro
Mensajes: 9
Re: error grave en programa
«
Respuesta #2 en:
Miércoles 10 de Noviembre de 2010, 14:09 »
0
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
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: error grave en programa
«
Respuesta #3 en:
Miércoles 10 de Noviembre de 2010, 14:31 »
0
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.
Fr33k K0mpu73r
winnipu
Nuevo Miembro
Mensajes: 9
Re: error grave en programa
«
Respuesta #4 en:
Jueves 11 de Noviembre de 2010, 08:54 »
0
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;
}
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: error grave en programa
«
Respuesta #5 en:
Jueves 11 de Noviembre de 2010, 09:01 »
0
Claro, era obvio, estoy un poco cegato. Eso te pasa porque no declaras el tamaño de
dir
. Haz esto:
Código: C
char
dir
[
256
]
;
strcpy
(
dir
,
getenv
(
"windir"
)
)
;
etc...
A ver qué tal. Ojo con no sobrepasar el tamaño del vector.
Fr33k K0mpu73r
winnipu
Nuevo Miembro
Mensajes: 9
Re: error grave en programa
«
Respuesta #6 en:
Jueves 11 de Noviembre de 2010, 09:58 »
0
Ya he probado eso M0skit0 y sigue sin descargar el archivo en systemroot. No se que hago mal. Antes bufferoverflow pero descargaba el index.html en systemroot, pero ahora sin el bufferoverflow y con lo demas igual salvo que uso strncat en vez de strcat, no descarga index.html en systemroot. Alguna idea de porque no? No se que hacer para ver donde falla.
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: error grave en programa
«
Respuesta #7 en:
Jueves 11 de Noviembre de 2010, 10:55 »
0
Por el código tal y como lo tienes ahora (exactamente).
Fr33k K0mpu73r
winnipu
Nuevo Miembro
Mensajes: 9
Re: error grave en programa
«
Respuesta #8 en:
Jueves 11 de Noviembre de 2010, 15:49 »
0
Muchisimas gracias m0squit0. Programa plenamente funcional y sin buffer overflow. Gracias de corazon, me has ayudado mucho. Siento ser tan cazurro, pero llevo cuatro dias con c++. Pregunte en mas sitios, pero en ninguno fueron tan comprensivo y paciente como contigo. Mis mas sentidas gracias.
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: error grave en programa
«
Respuesta #9 en:
Jueves 11 de Noviembre de 2010, 16:46 »
0
De nada winnipu. Espero que tu trayectoria con C++ sea larga y fructífera
Fr33k K0mpu73r
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
error grave en programa