Cita de: MAFUS en 18 Enero 2018, 21:19 PM
¿Qué llevas hecho?
No te vamos a escribir todo desde cero, te resolveremos dudas puntuales o te lo explicaremos hasta que lo entiendas (a partir de lo que veamos en donde fallas).
Vale.
Yo tengo una cabecera que se llama ayoub.h, luego tengo main.c y implementacion.c
en la cabecera tengo este código:#ifndef _AYOUB_H
#define _AYOUB_H
//
#include<stdio.h>
#include <string.h>
//#include <cstring.h>
#define MAX 50
void uniones(char *a, char *b, char *c);
#endif
El fichero main.c tengo esto:#include<stdio.h>
//#include <cstdlib>
#include"ayoub.h"
#include <string.h>
int main(){
printf("Introduzca tres palabras");
char a [15]; //el MAX me da error
char b [15];
char c [15];
printf("\nPalabra A");
gets(a); // solo lee 1 palabra
printf("\nPalabra A");
gets(b); // solo lee 1 palabra
printf("\nPalabra A");
gets(c); // solo lee 1 palabra
printf("Nombre de palabra A ingresado es: ");
puts(a);
printf("Nombre de palabra B ingresado es: ");
puts(b);
printf("Nombre de palabra C ingresado es: ");
puts(c);
char cadena_union = uniones( a, b, c);
puts(cadena_union);
// system("PAUSE");
return 0;
}
Aquí se supone que debo rellenar las 3 cadena y devolver el resultado a la función de la cabecera.El el fichero de implementacion.h tengo esto:#include"ayoub.h"
#include<stdio.h>
#include<string.h>
using namespace std;
void uniones(){
int longitud1, longitud2, longitud3 = 0;
int suma_longitudes = 0;
longitud1= strlen(a); //copio cuantos el numero de caracteres a longitud1
longitud2= strlen(b); //copio cuantos el numero de caracteres a longitud2
longitud3= strlen(c); //copio cuantos el numero de caracteres a longitud3
printf("\nLa cadena A tiene %d caracteres", longitud1); //aqui simplemente visualizo cuantos son
printf("\nLa cadena B tiene %d caracteres", longitud2);
printf("\nLa cadena C tiene %d caracteres", longitud3);
suma_longitudes=longitud1+longitud2+longitud3; //sumo las longitudes para asignar espacio para la string cadena
char *cadena = (char *)malloc((suma_longitudes + 1) *sizeof(char));//asigno el espacio acorde con lo que he introducido en las 3 cadenas de palabras
printf("\nCadena: ");
//scanf("%s", cadena);
strcpy(cadena, a);//esto no sé si esta bien, pero lo que intento hacer es copiar el contenido de las 3 en una cadena
strcpy(cadena, b);
strcpy(cadena, c);
printf("\n El resultado es %s", cadena);
}
Aquí lo que intento hacer es reservar espacio en la memoria con malloc y copiar el contenido de las 3 cadenas (a,b,c) en una dejando espacio entre cada contenido.
Saludos
Los includes sobran en el ayoub.h ya que no haces uso de ninguna función de ellas.
Implementación.c sobra, el ejercicio te pide el main y justo debajo, en el mismo archivo, la implementación de la función.
La firma de la declaración y de la definición de la función deben coincidir. Deben devolver el mismo tipo de dato y los argumentos deben ser del mismo tipo.
La función debe devolver una cadena, por lo que la declaración que hay en la cabecera debería ser char* y no void como tipo de dato devuelto por la función.
Si quieres una constante definida en la cabecera usa la palabra clave const. En main deberás declararla como extern.
strcpy còpia al principio de la cadena destino, lo que necesitas es concatenar cadenas y se hace con strcat.
El enunciado dice que debes separar con espacios las palabras pero al adquirir espacio con malloc no tienes en cuenta los espacios.
De igual forma tampoco los incluyes al formar la cadena.