Programación General > C/C++
Problemas funciones con entrada y retorno de arrays
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
[*] Página Anterior
Ir a la versión completa