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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al utilizar archivos en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al utilizar archivos en C  (Leído 1,822 veces)
alejandro_gsw

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Problema al utilizar archivos en C
« en: 6 Abril 2016, 14:00 pm »

Hola buenas,
Soy nuevo en el foro y tenía un problemilla con un programa.
Tengo dos archivos, el primero donde esta el main y el otro donde tengo el archivo con el texto que me tiene que leer, en este caso son DNI. El problema viene cuando quieres meter el DNI y no te reconoce lo que hay dentro del archivo, además quiero que cuando meta el DNI si no está en el texto del archivo DNIList.txt que lo añada. Os dejo por aquí el código a ver si podéis ver algo que este mal o si me podéis echar un cable  ;D.
También podéis ver que  para que lleve a abrir el archivo DNIList se comprueba que el DNI tenga un formato correcto.

Citar
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXID 16 /* Per fer-ho interessant, s’ha ampliat a 16. JAJAJAJA que majos */
  4. #define IDLEN 9
  5. char IDtable[MAXID][IDLEN+1]; /* Conté la llista d’autoritzats. */
  6. int IDtableLen; /* Quantitat de números d’identitat a IDtable. */
  7.  
  8. int IDtableLoad( char DNI[] )
  9. {
  10. FILE *fptr;
  11. char mot[BUFSIZ];
  12. int i;
  13. fptr = fopen( "DNIList.txt", "rt" );
  14. if( fptr != NULL ) {
  15. i = 0;
  16. fscanf( fptr, " %s", mot );
  17. while( !feof( fptr ) ) {
  18. //if() {
  19. //i = crida a la funció de guardar-lo a la taula;
  20. //} /* if */
  21. fscanf( fptr, " %s", mot );
  22. } /* while */
  23. fclose( fptr );
  24. } else {
  25. i = -1;
  26. } /* if */
  27. return i;
  28. } /* IDtableLoad */
  29.  
  30. char DNI[10];
  31. int validacioDNI (char DNI[10]);
  32. int DNInum;
  33.  
  34. int res = 0;
  35.  
  36. validacioDNI (char DNI[10])
  37.  
  38. {
  39.  
  40. char restalletra[23];
  41. int fin = 0;
  42. int digit;
  43. int lletra;
  44. int i = 0;
  45. int resta;
  46. int validacio = 0;
  47. int DNIincomplet = 0;
  48.  
  49.  
  50.  
  51.        if (DNI[9] != '\0')
  52.        {
  53.  
  54.          printf ("Tamany incorrecte");
  55.          validacio = 1;
  56.  
  57.                };
  58. while (i < 9 && DNIincomplet == 0)
  59. {
  60.    if (DNI[i] == NULL)
  61.    {
  62.        DNIincomplet = 1;
  63.          printf ("Tamany incorrecte");
  64.          validacio = 1;
  65.    }
  66.  i = i +1;
  67. };
  68.  
  69. i = 0;
  70.  while ( i <8 && digit != 0 )
  71.  {
  72.      digit = isdigit( DNI[i] );
  73.      i = i+1;
  74.  
  75.  
  76.  
  77.  };
  78.    if (digit == 0 && validacio == 0)
  79.      {
  80.          validacio = 1;
  81.  
  82.  
  83.      };
  84.  
  85.      lletra = isalpha( DNI[8] );
  86.      if (lletra == 0 && validacio == 0)
  87.      {
  88.  
  89.          validacio = 1;
  90.      };
  91.  
  92. DNInum = ((DNI [0] - '0')*10000000) +((DNI [1] - '0')*1000000) +((DNI [2] - '0')*100000) +((DNI [3] - '0')*10000) +((DNI [4] - '0')*1000) +((DNI [5] - '0')*100)
  93. + ((DNI [6] - '0')*10) + ((DNI [7] - '0'));
  94.  
  95.  
  96. restalletra[0] = 'T';
  97. restalletra[1] = 'R';
  98. restalletra[2] = 'W';
  99. restalletra[3] = 'A';
  100. restalletra[4] = 'G';
  101. restalletra[5] = 'M';
  102. restalletra[6] = 'Y';
  103. restalletra[7] = 'F';
  104. restalletra[8] = 'P';
  105. restalletra[9] = 'D';
  106. restalletra[10] = 'X';
  107. restalletra[11] = 'B';
  108. restalletra[12] = 'N';
  109. restalletra[13] = 'J';
  110. restalletra[14] = 'Z';
  111. restalletra[15] = 'S';
  112. restalletra[16] = 'Q';
  113. restalletra[17] = 'V';
  114. restalletra[18] = 'H';
  115. restalletra[19] = 'L';
  116. restalletra[20] = 'C';
  117. restalletra[21] = 'K';
  118. restalletra[22] = 'E';
  119.  
  120. resta = DNInum % 23;
  121.  
  122. if (validacio == 0){
  123. if (restalletra[resta] != DNI[8]  )
  124. {
  125.    validacio = 1;
  126.    printf ("Lletra incorrecte");
  127. };
  128. };
  129. i= 0;
  130.  
  131. return validacio;
  132. };
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140. int main()
  141. {
  142.    printf ("Introdueix DNI:  ");
  143.    scanf ("%s", &DNI);
  144.    res = validacioDNI (DNI);
  145.  
  146. if (res == 0)
  147. {
  148.    printf ("\nDNI correcte, ara obrirem el fitxer amb la base de dades \n");
  149.    //Aqui mandariamos algo a la primera funcion
  150.    res=IDtableLoad(DNI);
  151.    if(res==-1){
  152.        printf("El DNI no es al fitxer.");
  153.    }else{
  154.        printf("El DNI es al fitxer");
  155.    }
  156. };
  157.  
  158. if (res == 1)
  159. {
  160.    printf ("\nDNI incorrecte");
  161. };
  162.  
  163.  
  164.  
  165.    return 0;
  166. }
  167.  


Y este es el fichero DNIList (Los DNI son inventados  :rolleyes:)

Citar
94025635W
84220350P
40103636P
Z0893943F
65292343N
42972192G
X7942365M
Y9872602G
11622852D
71438118A
Y0884005Z
X0652947T
24901532F
19910859N
67501492B
50482351L

Muchísimas gracias  :D


« Última modificación: 6 Abril 2016, 17:13 pm por alejandro_gsw » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Problema al utilizar archivos en C
« Respuesta #1 en: 6 Abril 2016, 14:40 pm »

buen dia.

veo que lee el archivo pero no veo que cargue contenido en la memoria.

Usa El Code=c para poner tu codigo. Ya que es dificil leerlo asi


En línea

alejandro_gsw

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problema al utilizar archivos en C
« Respuesta #2 en: 6 Abril 2016, 17:13 pm »

¡Editado!
Como se puede cargar un archivo en la memoria, ahora mismo no caigo  ;D
« Última modificación: 6 Abril 2016, 17:17 pm por alejandro_gsw » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Problema al utilizar archivos en C
« Respuesta #3 en: 6 Abril 2016, 17:28 pm »

Código
  1. int IDtableLoad( char DNI[] )
  2. {
  3. FILE *fptr;
  4. char mot[BUFSIZ];
  5. int i;
  6. fptr = fopen( "DNIList.txt", "rt" );
  7. if( fptr != NULL ) {
  8. i = 0;
  9. fscanf( fptr, " %s", mot );
  10. while( !feof( fptr ) ) {
  11. //Aqui deberias de agregar la variable leida a la variable  global
  12. fscanf( fptr, " %s", mot );
  13. } /* while */
  14. fclose( fptr );
  15. } else {
  16. i = -1;
  17. } /* if */
  18. return i;
  19. } /* IDtableLoad */
  20.  

Esta funcion hace lo siguiente:
Abrir el archivo
Lee un renglon
Lo  guarda en una variable local
Lee el siguiente renglon. y asi sucesivamente

Mas nunca guarda la variable locan el el arreglo global que tiene.

Código
  1. char IDtable[MAXID][IDLEN+1];

Al parecer es un buffer que solo tiene espacio para 116 DNI.

El como pasar la variable local al buffer global es tu tarea.

Sugerencias
usar memcpy
hacer un ciclo manual y copiar byte por byte.
Cambiar el buffer estatico por memoria dinamica.
Traducir del frances al español jajajajaja

Otra observacion importante el programa es vulnerable a buffer overflow. si el renglon leido desde el archivo es de mayor tamaño a BUFSIZ entonces escribira en las variables continuas del programa y causara un segment fault
« Última modificación: 6 Abril 2016, 17:37 pm por AlbertoBSD » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Utilizar Kill en VB para eliminar archivos
Programación Visual Basic
roberth780 3 4,160 Último mensaje 12 Septiembre 2010, 18:04 pm
por nemesysrgs
Problema al utilizar PHP
PHP
Riki_89D 3 2,000 Último mensaje 5 Noviembre 2010, 22:14 pm
por Shell Root
Utilizar uploadify y renombrar los archivos
Desarrollo Web
Crash_RPM 2 2,902 Último mensaje 22 Agosto 2012, 12:17 pm
por Crash_RPM
Como modificar archivos con c++ sin utilizar system
Programación C/C++
kerkox 5 3,281 Último mensaje 12 Abril 2014, 19:36 pm
por amchacon
Como utilizar fstream para archivos con rutas dinamicas
Programación C/C++
kerkox 7 5,566 Último mensaje 15 Abril 2014, 18:40 pm
por x64core
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines