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


 


Tema destacado: Análisis del vídeo del hackeo al Sindicato de los Mossos de Esquadra


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Consutla sobre un problema con punteros y memoria dinamica.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consutla sobre un problema con punteros y memoria dinamica.  (Leído 383 veces)
Arturo400

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Consutla sobre un problema con punteros y memoria dinamica.
« en: 22 Septiembre 2016, 22:08 »

Hola

Estoy realizando un programa en el cual tengo que leer una frase de un archivo y guardarla en un puntero. Hasta ahi no hay ningun problema. Luego lo que tengo que hacer es seleccionar un entero desde el cual se va a leer la frase y cuantos caracteres quiero leer de esa frase. Lo que queda va a ser guardado en un nuevo puntero que tengo que mostrar por pantalla.

Entonces si tengo la frase

"Universidad de Buenos Aires"

Y leo desde el caracter 4  unos 5 caracteres, en mi nuevo puntero tendria que quedar "ersida".

Hasta ahora he tratado de hacerlo y no le encuentro la forma, cuando intento que lea desde un cierto caracter o no copia nada al nuevo puntero o copia letras que no tendrian que ir.

Les dejo mi codigo para ver si me pueden ayudar para ver en que me estoy equivocando.
El programa se divide en una parte en donde le pido la informacion al archivo y la guardo en un nuevo puntero y la otra parte en donde intento a partir del puntero ya existente, crear otro.

Código
  1. [/#include <stdio.h>
  2. #include <stdlib.h>
  3. char * subcadena (char * p, unsigned int i, unsigned int n);  ///Esta funcion recibe mi puntero original y la longitud que quiero y retorna un nuevo puntero.
  4. char * LECTURA();
  5.  
  6. int main()
  7. {
  8.    char *pa; /// Puntero donde guardo la informacion del archivo
  9.    char *pb;
  10.    unsigned int inicio;
  11.    unsigned int cantidad;
  12.  
  13.    pa=LECTURA();
  14.    printf(" \nLo leido del archivo es : %s \n ",pa);
  15.    printf("Ingrese el caracter desde el cual desea leer de la frase : ");
  16.    scanf("%d",&inicio);
  17.    printf("\nIngrese la cantidad de caracteres que desea contar: ");
  18.    scanf("%d",&cantidad);
  19.    pb=subcadena(pa,inicio,cantidad);
  20.    printf("\nLa frase queda : %s",pb);
  21.    return 0;
  22. }
  23.  
  24.  
  25.  
  26. char* LECTURA()
  27. {
  28.    int i=0;
  29.    char c;
  30.    char *pa;
  31.  
  32.    FILE*arch;
  33.  
  34.    arch=fopen("C:\\Users\\PC\\Desktop\\frases.txt","r"); ///Supongamos que en el txt esta "Universidad De Buenos Aires" - Solo esa frase.
  35.  
  36.    pa=malloc(sizeof(char));
  37.  
  38.    c=fgetc(arch);
  39.  
  40.    while(!feof(arch))
  41.    {
  42.        *(pa+i)=c;
  43.        i++;
  44.        pa=realloc(pa,(i+1)*sizeof(char));
  45.        c=fgetc(arch);
  46.    }
  47.    *(pa+i)='\0';
  48.    fclose(arch);
  49.    return pa;
  50. }
  51.  
  52.  
  53.  
  54. char * subcadena (char * p, unsigned int i, unsigned int n)
  55. {
  56.  
  57. int j=0;
  58. char * pc;
  59. char letra;
  60. pc=malloc(sizeof(char));
  61. while(*(p+i)!='\0' && i<=n)
  62. {
  63.     letra=*(p+i);
  64.     *(pc+j)=letra;
  65.     j++;
  66.     pc=realloc(pc,(j+1)*sizeof(char));
  67.     i++;
  68. }
  69.    *(pc+j)='\0';
  70.    return pc;
  71. }
  72. code]


En línea

AlbertoBSD
💻🌎🌍🌏🌐 NWO📱
Colaborador
***
Desconectado Desconectado

Mensajes: 3.122


Libertad!!!!!


Ver Perfil WWW
Re: Consutla sobre un problema con punteros y memoria dinamica.
« Respuesta #1 en: 22 Septiembre 2016, 22:15 »

Creo que asi deberia de quedar
Código
  1. char * subcadena (char * p, unsigned int i, unsigned int n) {
  2. int j=0;
  3. char *pc;
  4. pc=malloc(n-i+1);
  5. while(*(p+i+j)!='\0' && (i+j)<=n) {
  6. *(pc+j)=*(p+i+j);
  7. j++;
  8. }
  9. *(pc+i+j)='\0';
  10. return pc;
  11. }
Saludos!


En línea

Crackeame si puedes Wallet.dat
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines