elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Ayuda con ejercicio en: 20 Diciembre 2010, 20:33 pm
hola, mi nombre es Jorge y soy estudiante de ingenieria informatica, primero decir que soy bastante novato en el tema, alla va el ejercicio:

Este ejercicio trata de realizar un script denominado bocabajo en C que coja un fichero y le de la vuelta de manera que las lineas que habia escritas en él queden la primera la ultima, la segunda la penultima y asi sucesivamente, es decir, un ejemplo seria el siguiente:

cat fich1
uno
dos
tres
cuatro

./bocabajo fich1
cuatro
tres
dos
uno

eso es lo que debe realizar el script, y se supone que hemos de utilizar memoria dinamica, al no saber muy bien como va el tema de memoria dinamica, estoy haciendo el script primero sin utilizar memoria dinamica para ver si consigo hacerlo y me da error de segmentacion, tras un tiempo pensando se me ocurrio que podria crear un array bidimensional(se me olvido mencionar, cada linea de fichero tiene un maximo de 2048 caracteres), y mientras voy leyendo las lineas del fichero, ir guardandolas en este array, y luego imprimir el array desde la ultima posicion hasta la primera, el problema es que no estoy muy familiarizado con arrays bidimensionales y tengo lagunas tambien con punteros, asique aqui adjunto mi codigo de lo que he hecho, y a ver si alguien me puede echar una mano, gracias de antemano :):

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. /////////PROGRAMA PRINCIPAL/////////
  6.  
  7. int main(int argc, char* argv[]){
  8.  
  9.  
  10. //declaracion parametros a usar//
  11. FILE *pm;
  12. char lineafile [2048];
  13. char linea [100][2048];///lo he puesto para un maximo de 100 lineas al no usar memoria dinamica de momento
  14. int n;
  15. int c;
  16. pm = fopen(stdin,"rt");
  17. while(fgets(lineafile,2048,pm)!=NULL){
  18. for(n=0;n<=2048; ++n){
  19. strcpy(linea[n],lineafile);
  20. }
  21. }
  22. for(c=2048;c>=0;--c){
  23. printf("%s\n",linea[c]);
  24. }
  25. fclose(pm);
  26. }

he probado con el debuger y me da que el fallo de segmentacion esta en el fgets, y he cambiado tambien algo el programa para quitarme del medio el for de dentro del while, ha quedado asi, pero nose como quitar el error de segmentacion ese la verdad:

Código
  1. /////////LIBRERIAS DECLARADAS PARA USAR STRINGS Y COMANDOS ESPECIFICOS DE STRINGS Y PARA SACAR POR PANTALLA/////////
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. ////////FUNCION BOCABAJO//////////
  6.  
  7. /*void bocabajo(FILE *pm){
  8. }*/
  9.  
  10. /////////PROGRAMA PRINCIPAL/////////
  11.  
  12. int main(int argc, char* argv[]){
  13.  
  14.  /////////FUNCIONACA//////////
  15.  
  16. //declaracion parametros a usar//
  17. FILE *pm;
  18. //int args;
  19. char lineafile[2048];
  20. int contador=0;
  21. char linea [100][2048];
  22. int n;
  23. int c;
  24.  
  25. pm = fopen(stdin,"rt");
  26. while(fgets(lineafile,2048,pm)!=NULL){
  27. strcpy(linea[contador],lineafile);
  28. contador++;
  29. }
  30. for(c=contador;c>=0;--c){
  31. printf("%s\n",linea[c]);
  32. }
  33. fclose(pm);
  34. }

Lh: Utiliza las etiquetas GeSHi para poner código y no hagas doble post, utiliza el botón modificar.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines