Hola, crack81.
Gracias por el aporte.
Saludos.
Gracias por el aporte.
Saludos.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menútypedef struct{
char nombre[30];
char calle[30];
char ciudad[30];
size_t edad;
}_contacto;
typedef struct{
char *nombre;
char *calle;
char *ciudad;
size_t edad;
}_contacto;
CitarLa otra es que debes de retornat el valor del apuntador de fracea ya que si realloc cambia la posición de memoria de fraces dentro de una de las funciones la funcion main no se va a enterar y va a tener una copia antigua del apuntador.
#include <stdio.h>
#include <stdlib.h>
void ingreso( char** );
int main( void ){
char **frases=NULL;
ingreso( frases );
return 0;
}
void ingreso( char** frases ){
size_t i=0;
while(i < 5){
i++;
frases = (char**)realloc( frases, i * sizeof(char*) );
frases[i-1] = calloc(20,1);
printf( "\n Ingrese frase....:" );
fgets( frases[i-1], 20, stdin );
}
i=0;
while(i < 5){
printf( "\n Frases Ingresadas....: %s", frases[i] );
free(frases[i]);
i++;
}
}
Citarel contenido que esta siendo apuntado es un vector de apuntadores.Ya había leído esto en alguna parte y creo que es la clave para entender los punteros dobles, en cuanto a
ptrFrases = ingreso( frases );
Citarayp.c:10:2: error: invalid operands to binary & (have 'int' and 'char **')Y la pregunta del millón, porque debo utilizar doble apuntador, tengo claro que lo que contiene la variable apuntador es una dirección de memoria y que un doble apuntador contiene la dirección de memoria de otro puntero. -
#include <stdio.h>
#include <stdlib.h>
char ingreso( char **frases );
int main( void ){
char **frases=NULL, **ptrFrases=NULL;
size_t i = 0
ptrFrases = ingreso( frases );
while(i < 5){
printf( "\n Frases Ingresadas....: %s", ptrFrases[i] );
free(frases[i]);
i++;
}
return 0;
}
char ingreso( char **frases ){
size_t i=0;
while(i < 5){
i++;
frases = (char**)realloc( frases, i * sizeof(char*) );
frases[i-1] = calloc(20,1);
printf( "\n Ingrese frase....:" );
fgets( frases[i-1], 20, stdin );
}
return **frases;
}
#include <stdio.h>
#include <stdlib.h>
int main( void ){
char **frases=NULL;
size_t i=0;
while(i < 5){
i++;
frases = (char**)realloc( frases, i * sizeof(char*) );
frases[i-1] = calloc(20,1);
printf( "\n Ingrese frase....:" );
fgets( frases[i-1], 20, stdin );
}
i=0;
while(i < 5){
printf( "\n Frases Ingresadas....: %s", frases[i] );
free(frases[i]);
i++;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main( void ){
char **frases=NULL, *tmp=NULL;
size_t i=0;
while(i < 5){
i++;
frases = (char**)realloc( frases, i * sizeof(char*) );
tmp = calloc(20,1);
printf( "\n Ingrese frase....:" );
fgets( tmp, 20, stdin );
frases[i-1] = tmp;
}
i=0;
while(i < 5){
printf( "\n Frases Ingresadas....: %s", frases[i] );
i++;
}
free(frases);
return 0;
}
Citarayp.c:11:10: warning: assignment from incompatible pointer type [enabled by default]
frases = (char*)realloc( frases, i * sizeof(char*) );
#include <stdio.h>
#include <stdlib.h>
int main( void ){
char **frases, *tmp;
size_t i=0;
while(i < 5){
frases = (char*)realloc( frases, i * sizeof(char*) );
tmp = calloc(20,1);
printf( "\n Ingrese frase....:" );
fgets( tmp, 20, stdin );
frases[i] = tmp;
i++;
}
i=0;
while(i < 5){
printf( "\n Frases Ingresadas....: %s", frases[i] );
i++;
}
return 0;
}