Programación General > C/C++
Problemas funciones con entrada y retorno de arrays
m0skit0:
Usa las etiquetas de código, que no cuesta ná... :P
Tu problema radica en que LeeByte() no devuelve un byte, sino un int (4 bytes). Esto te debería dar problemas de compilación aquí:
--- Código: C ---cadena[i] = data; a menos que tengas silenciado tu compilador, o no hagas casos de los avisos que te marca, cosa que no te aconsejo.
cadena es char (1 byte) y data es int (4 bytes), por tanto te pasas del espacio reservado de 9 bytes que tienes. Declara char data y char LeerByte() y lo tienes solucionado.
Saludos
PD: de todo esto te avisa el compilador, a ver si le haces algo de caso <_<
throwk:
He cambiado el retorno de la funcion LeeByte por un char, y el data tambien como byte pero el resultado es el mismo. Me falla al meter el byte en el array frase
También he probado a meterle por parámetro la direccion del array haciendo algo similar a la funcion EnviaByte pero a la inversa y nada, sigue fallando. El compilador no me ha dado ningun error, antes con otras cosas de tipos de datos si, pero en este codigo que pego en principio no hay errores de compilacion o será que no me muestra este tipo de errores. En este caso como puedo hacer que me los muestre?
Aqui va el codigo completo:
--- 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 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); for (i=0;i<longitud;i++){ data=frase[i]; enviaByte(data); } } char leeByte(){ char data; data = 90; return data;} char* leeString(char *frase){ int data; int i; int longitud; char cadena[9]; longitud = strlen(frase); printf("LONGITUD2: %i rn",longitud); for (i=0;i<5;i++){ data = leeByte(); printf("data: %c rn", (char)data); frase[i] = data; } //strncat(cadena, "", 1); //strcpy(frase,cadena); printf("recibida: %s rn", frase); return frase;}
Gracias y un saludo
throwk:
Hola de nuevo, he estado investigando un poco mas acerca del retorno de arrays de una funcion y he hecho este codigo que funciona "a medias" y sin sentido. Lo pego y explico
--- Código: C --- #include <stdio.h>#include <string.h> char *devuelve1(void);char *devuelve2(void); int main (void){ char uno[6];char dos[6]; strcpy(uno, devuelve1());printf("frase recibida 1: %sn", uno);strcpy(dos, devuelve2());printf("frase recibida 2: %sn", dos); return 0;} char *devuelve1(void){char *p , b[] = { 'c' , '' , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 } ; p = b ; printf("valor de 1: %c rn",*(p+8)); return p;} char *devuelve2(void){ char *p , a[] = { 'b' , '' , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 } ; p = a ; printf("valor de 2: %c rn",*(p+8)); return p;}
Hay dos funciones que devuelven un array, una contiene una b y otra una c, pero en la salida sólo se ve el array de la funcion devuelve2 que retorna una b. Esta es la salida:
valor de 1: P
frase recibida 1:
valor de 2: P
frase recibida 2: b
Si comento la funcion devuelve1() del main, la funcion devuelve2 no retorna el valor que hasta ahora retornaba. Se supone que son funciones independientes pero algo pasa que si comento la primera la otra no funciona y sólo funciona si estan las dos. Esta es la salida comentando la primera funcion:
valor de 2: P
frase recibida 2:
Ya si que no entiendo nada
Saludos
m0skit0:
Vamos por partes. Primero sigamos con lo de antes, luego vemos esto último, que si no es un lío, ¿vale?
Estaría bien que me pusieras la función main() para que pueda probarlo en las mismas condiciones que tú.
Un saludo
throwk:
Lo siento, no me di cuenta que no se pegó. Este es el main
--- Código: C --- int main(){ int longitud; char *frase_rec; frase_rec = leeString(frase_rec); longitud = strlen(frase_rec); printf("longitud de la frase recibida: %i rn",longitud); printf("frase recibida: %s rn",frase_rec); enviaString(frase_rec,longitud); }
un saludo
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa