Vuelvo con otra consulta de C
Tengo el siguiente enunciado para armar mi funcion
/*
* Asigna en el tercer parámetro, la concatenación
* de los primeros dos Strings
* Ejemplo:
* char* nombre = "Ritchie";
* char* saludo;
* string_concat("Hola ", nombre, &saludo);
* =>
* saludo = "Hola Ritchie"
*/
void string_concat_dinamyc(const char*, const char*, char**);
Y esto fue lo que hice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void string_concat_din(char* p1, char* p2,char** lugar){
char* concatenacion = malloc(sizeof(char)*(strlen(p1)+strlen(p2)+1));
*concatenacion = 0;
strcat(concatenacion,p1);
strcat(concatenacion,p2);
*lugar = &concatenacion;
printf("--Dentro de la funcion \n"
"Lo que tengo guardado donde apunta concatenacion es: %s \n",concatenacion);
printf("Direccion DONDE SE ENCUENTRA PUNTERO concatenacion: %p \n",&concatenacion);
printf("Direccion DONDE APUNTA concatenacion: %p \n",concatenacion);
printf("Direccion DONDE APUNTA concatenacion: %p\n",*concatenacion);
printf("Direccion A DONDE APUNTO -DESREFERENCIADO UNA VEZ- lugar: %p \n"
" --Fin de funcion\n",*lugar);
//printf("La palabra: %s",lugar);
}
int main(void){
char* nombre = "Ritchie";
char* saludo = "Hola ";
char* direccion;
string_concat_din(nombre,saludo,&direccion);
printf("%s",direccion);
return 0;
}
Y lo que imprimo en pantalla es lo siguiente:
--Dentro de la funcion
Lo que tengo guardado donde apunta concatenacion es: RitchieHola
Direccion DONDE SE ENCUENTRA PUNTERO concatenacion: 0xbfcf34e8
Direccion DONDE APUNTA concatenacion: 0x8cfc008
Direccion DONDE APUNTA concatenacion: 0x52
Direccion A DONDE APUNTO -DESREFERENCIADO UNA VEZ- lugar: 0xbfcf34e8
--Fin de funcion
5Ͽ
Todavia no estoy del todo familiarizado con los operadores unarios como * y &
Tengo el puntero char** Lugar
(Un puntero que apunta a un puntero que contiene un tipo de dato char, hago que apunta) que apunta donde se encuentra mi puntero char* concatenacion
deberia de poder hacer el siguiente juego lugar -> concatenacino -> direccion donde esta mi string
. De esta forma cuando main invoca la funcion con los 3 parametros: 1ro y 2do se van a concatenar y guardar en un puntero y luego mi 3er parametro es donde debo guardar mi nuevo sring. Pero esto no esta pasando
Otra de las dudas que tengo es con los prints que hago para concatenacion:
printf ("%p",&concatenacion)
: Es donde se encuentra mi puntero
printf ("%p",*concatenacion)
: Adonde apunta mi puntero (entiendo que esta deberia ser la direccion donde se encuentra mi string)
printf ("%p",concatenacion)
: Que es lo que vendria a ser?