Programación General > C/C++
Problemas funciones con entrada y retorno de arrays
throwk:
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 --- #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: %i rn",longitud); //char cadena[longitud]; //strcpy(cadena,frase); // strncat(cadena, "n", 1); for (i=0;i<longitud;i++){ data=frase[i]; enviaByte(data); } } int leeByte(){ int i, data; // hay que cambiarlo por un uint8_t data = 90; /* for (i = 0; i <= 7; i++) { data <<= 1; if (bit_is_set (TWI_PIN_SDA, bSDA)) data++; } */ return data;} char* leeString(){ int data; char * frase = "aaaaa"; int i; int longitud; char cadena[longitud]; longitud = strlen(frase); printf("LONGITUD2: %i rn",longitud); for (i=0;i<5;i++){ data = leeByte(); printf("data: %c rn", (char)data); cadena[i] = data; } strcpy(frase,cadena); strncat(frase, "", 1); printf("FRASE: %s rn", frase); return frase;} int main(){ int longitud = 8; char *frase_rec; frase_rec = leeString(); longitud = strlen(frase_rec); printf("LONGITUD1: %i rn",longitud);printf("temp2: %s rn",frase_rec); enviaString(frase_rec,longitud); }
m0skit0:
--- Código: C ---int longitud;char cadena[longitud]; ¿Qué valor tiene longitud? :P
throwk:
La inicializo a 8 y luego le asigno el valor de la longitud del array que en este ejemplo resulta 5 porque char * frase = "aaaaa"; ( de la funcion leeString() )
# int longitud = 8;
...
# longitud = strlen(frase_rec);
Gracias por contestar
m0skit0:
Vamos a ver... En tu código no hay ninguna incialización de longitud (línea 63). A menos que te refieras a la variable longitud en main(). Si es así, te diré que no tiene nada que ver con la otra. Deberías repasar el alcance de las variables, y el concepto de variables locales.
Además, no puedes usar una variable como tamaño de un array en char cadena[longitud];, debe ser un valor constante (error C2057: expected constant expression).
Saludos
throwk:
Tienes razon, no habia caido en que el array debe ser de tamaño constante, de todas formas no esta ahi el error. Creo que me falla en la funcion LeeString:
char* leeString(){
int data;
char * frase = "aaaaa";
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);
cadena = data;
}
strncat(cadena, "", 1);
strcpy(frase,cadena);
printf("FRASE: %s rn", frase);
return frase;
}
Segun a salida que tengo, falla justo en strcpy(frase,cadena); me imagino que por el tipo de datos porque uno lo declaro como puntero y el otro no. Lo que quiero conseguir es meter bytes en un array y devolverlo. Te muestro la salida:
LONGITUD2: 5
data: Z
data: Z
data: Z
data: Z
data: Z
Fallo de segmentación
La Z viene de la funcion LeeByte que devuelve un 90 (Z en ascii)
Un saludo!
Navegación
[#] Página Siguiente
Ir a la versión completa