|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - throwk
Páginas: [1]
1
« en: Miércoles 24 de Junio de 2009, 22:53 »
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. #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"); } data_env = data_env >> 1; } } 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 ); 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 ); printf("longitud de la frase recibida: %i rn",longitud ); printf("frase recibida: %s rn",frase_rec ); enviaString(frase_rec,longitud); }
2
« en: Martes 23 de Junio de 2009, 18:15 »
Lo siento, no me di cuenta que no se pegó. Este es el main int main(){ int longitud; char *frase_rec; frase_rec = leeString(frase_rec); printf("longitud de la frase recibida: %i rn",longitud ); printf("frase recibida: %s rn",frase_rec ); enviaString(frase_rec,longitud); }
un saludo
3
« en: Martes 23 de Junio de 2009, 00:15 »
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 #include <stdio.h> #include <string.h> char *devuelve1(void); char *devuelve2(void); int main (void) { char uno[6]; char dos[6]; printf("frase recibida 1: %sn", uno ); 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
4
« en: Lunes 22 de Junio de 2009, 20:38 »
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: #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"); } data_env = data_env >> 1; } } 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]; printf("LONGITUD2: %i rn",longitud ); for (i=0;i<5;i++){ data = leeByte(); printf("data: %c rn", (char)data ); frase[i] = data; } //strncat(cadena, "
|
|