• Jueves 14 de Noviembre de 2024, 04:31

Mostrar Mensajes

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.


Temas - throwk

Páginas: [1]
1
C/C++ / Problemas funciones con entrada y retorno de arrays
« en: Sábado 20 de Junio de 2009, 19:42 »
Hola a todos, estoy intentando hacer un programa que lea varios numeros del teclado como un byte (por ejemplo un 90 que corresponde a una Z en ASCII), este dato se recoge en un array tipo char y aqui está el problema que explico mas abajo. Despues estos datos guardados en el array se escriben en formato binario. Ya se que se podria hacer todo en una funcion pero tengo que hacerlo asi por separado para hacer otros avances más adelante.

El problema en sí está en :      strcpy(frase,cadena);     que da fallo de segmentacion, imagino que porque una esta como puntero y la otra como array. He probado a hacerlo asi tb :  frase = data;   y salta aqui el fallo de segmentacion     y tb con   cadena = itoa(data);   y da error de compilacion

Espero que me puedan ayudar porque ya no se que mas probar. Muchisimas gracias


Código: C
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6.  
  7. int enviaByte(unsigned int data){
  8.     int i;
  9.     unsigned int data_env;
  10.     data_env=data;
  11.  
  12.  
  13.     for (i=0;i<8;i++){  //DATOS
  14.        
  15.         if (data_env & 0x01) { printf("1"); }
  16.         else { printf("0"); }
  17.         data_env = data_env >> 1;
  18.     }
  19.       printf(" ");
  20.  
  21. }
  22.  
  23. void enviaString(char *frase,int longitud){
  24.     unsigned int data;
  25.     int s;
  26.     int i;
  27.    
  28.  
  29.     printf("LONGITUD: %i rn",longitud);
  30.     //char cadena[longitud];
  31.     //strcpy(cadena,frase);
  32.    
  33. //  strncat(cadena, "n", 1);
  34.     for (i=0;i<longitud;i++){
  35.         data=frase[i];
  36.         enviaByte(data);
  37.     }
  38.    
  39. }
  40.  
  41.  
  42. int leeByte()
  43. {
  44.     int i, data; // hay que cambiarlo por un uint8_t
  45.  
  46.     data = 90;
  47.  
  48.     /*
  49.     for (i = 0; i <= 7; i++) {
  50.  
  51.         data <<= 1;
  52.         if (bit_is_set (TWI_PIN_SDA, bSDA))
  53.             data++;
  54.     }
  55.     */
  56.  
  57.     return data;
  58. }
  59.  
  60. char* leeString(){
  61.     int data;
  62.     char * frase = "aaaaa";
  63.     int i;
  64.     int longitud;
  65.     char cadena[longitud];
  66.  
  67.     longitud = strlen(frase);
  68.     printf("LONGITUD2: %i rn",longitud);
  69.  
  70.  
  71.     for (i=0;i<5;i++){
  72.         data = leeByte();
  73.         printf("data: %c rn", (char)data);
  74.         cadena[i] = data;      
  75.     }
  76.     strcpy(frase,cadena);
  77.         strncat(frase, "", 1);
  78.     printf("FRASE: %s rn", frase);
  79.     return frase;
  80. }
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89. int main(){
  90.  
  91.   int longitud = 8;
  92.   char *frase_rec;
  93.  
  94.  
  95.  frase_rec = leeString();
  96.  longitud = strlen(frase_rec);
  97.  printf("LONGITUD1: %i rn",longitud);
  98. printf("temp2: %s rn",frase_rec);
  99.  
  100.  
  101.   enviaString(frase_rec,longitud);
  102.  
  103. }
  104.  
  105.  
  106.  
  107.  

Páginas: [1]