[ Foro de C++ ]
Bienvenido, José Angel! :-)
A ver, te voy comentando lo que vea...
- En primer lugar, casi todo el fuente es C (salvo por el cin y cout), toda la lógica de manipulación de cadenas que estás usando es de C, así que podías haber hecho al pregunta en el foro de C, que está más frecuentado, así que quizá alguien te hubiera contestado antes que yo, que ando un poco liado...
- En segundo lugar, usas alguna construcción poco estándar, como eso de "char varapo[tam]", que hace que no compile en Borland C++ 5.5: siendo puristas, entre los corchetes debe aparecer una constante, no una variable; si quieres usar una variable debería ser reservando memoria dinámicamente (con "malloc" o "new", por ejemplo). La solución más sencilla, ya que el programa es de pequeño tamaño, es redimensionar, dejando espacio de sobra para todas las variables:
char varapo[MAX_SIZE];
- En tercer lugar, el fuente es relativamente poco legible: los puristas recomiendan que todas las variables de declaren al principio de la función, no mezcladas con el código, y que los nombres sean autoexplicativos (¿qué quiere decir "varapo"? ¿qué diferencia hay entre "contador" y "contador2"? ).
- Si corrijo el apartado 2, compila correctamente con BCC55 y funciona bien con el ejemplo que propones "C:\ies\script.js". La lógica de cómo lo resuelves es buena, pero lo haces un poco engorroso: yo recorrería de atrás a adelante pero no para copiar de una cadena a otra, sino sólo para localizar dónde está la última barra, y entonces hacer dos "strcpy", uno que copie a partir de la barra (nombre de fichero) y otro antes de la barra (ruta).
- Para terminar, no es un programa robusto :-p Antes de mirar el valor de "argv[1]" deberías siempre comprobar "argc" para asegurarte de que hay parámetros. Y no pongas "includes" que no necesitas, como el de "time", el de "windows", el de "dirent", etc.
Te copio aquí un fragmento del fuente, pero se verá descolocado, así que te lo adjunto también.
longitud=strlen(rutaCompleta);
// Busco última barra (o principio de cadena si no la hay)
for(i=longitud; (i>=0) && (rutaCompleta[i]!='\\'); i--)
;
posicionBarra = i+1;
strcpy(nombreFichero, rutaCompleta +posicionBarra);
memset(carpeta, 0, MAX_SIZE);
strncpy(carpeta, rutaCompleta,posicionBarra);
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)