Programación General > C/C++

 Problemas funciones con entrada y retorno de arrays

<< < (3/3)

m0skit0:
Como sospechaba  :P

No reservas espacio para la cadena char *frase_rec en main() :P. Sólo declaras un puntero, es normal que te violación de memoria, porque estás usando un puntero no inicializado, sin memoria reservada  <_<

throwk:
Acabo de solucionarlo. Lo he hecho pasando un puntero al array que contiene su direccion a la funcion LeeString. De esta manera el array recibido se guarda en esta direccion porque creo que el problema estaba en que se guardaba en una variable local y al terminar la funcion, esta direccion de memoria se pisaba.

Muchisimas gracias por tus respuestas, se agradece mucho.

 Dejo el codigo que funciona por si a alguien le pudiera venir bien ya que creo que es algo básico pero algo lioso de hacer en C.



--- Código: C --- #include <stdio.h>#include <string.h>#include <stdlib.h>  int enviaByte(unsigned int data){    int i;    unsigned int data_env;    data_env=data;      for (i=0;i<8;i++){  //DATOS  Envia un byte en Ascii comenzando por el LSB                if (data_env & 0x01) { printf("1"); }        else { printf("0"); }        data_env = data_env >> 1;    }      printf(" "); } void enviaString(char *frase,int longitud){    unsigned int data;    int s;    int i;         printf("Longitud de la frase enviada: %i rn",longitud);    printf("enviada en EnviaString: %s rn", frase);     for (i=0;i<longitud;i++){        data=frase[i];        //printf("data en EnviaString: %c rn", data);        enviaByte(data);    }    }   char leeByte()      // a esta funcion se le puede anadir un scanf para que tome los datos del teclado.{    char data;    data = 'a';     return data;} char* leeString(char *frase){    int data;     int i;    int longitud;    char cadena[9];      printf("direccion de la frase recibida en el main: %p rn",frase);      longitud = strlen(cadena);    printf("LONGITUD2: %i rn",longitud);     for (i=0;i<8;i++){        data = leeByte();        printf("data: %c rn", (char)data);        cadena[i] = data;    }    cadena[8] = '';   // ponemos el delimitador de array     strcpy(frase,cadena);   // copiamos la cadena en "frase" que es la variable que hemos pasado por parametro. frase = cadena tb funciona            //frase = cadena;     printf("recibida en LeeString: %s rn", frase);    printf("primer caracter %c rn", frase[0]);    printf("direccion en LeeString: %p rn", frase);    return frase;}  int main(){     int longitud;    char frase_rec[40];    char *pfrase;     pfrase = frase_rec;     printf("direccion del array frase en el main: %p rn",pfrase);     strcpy(frase_rec,leeString(pfrase));     printf("direccion de la frase recibida en el main: %p rn",pfrase);     longitud = strlen(frase_rec);    printf("longitud de la frase recibida: %i rn",longitud);    printf("frase recibida: %s rn",frase_rec);      enviaString(frase_rec,longitud); }  

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa