Menú

Mostrar Mensajes

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ú

Mensajes - NOB2014

#151
Hola, crack81.
Gracias por el aporte.

Saludos.
#152
Hola, Alberto.
Estoy estudiando lista enlazada simple y como el libro está basado en el estudio de apuntadores
todo está hecho con punteros por eso la intriga. -

Muchas gracias y saludos.
#153
Hola, que tengan un muy buen día. -
Tengo una duda con los miembros de las estructuras y es saber si hay alguna diferencia en declararla de una u otra manera, alguna de las 2 ofrece alguna ventaja, es conveniente hacerlo de una manera o de otra o es exactamente lo mismo, debería saber esto cuando estudiaba las cadenas, pero se nota que me lo saltee. -
Se entiende que me refiero a trabajar con o sin punteros. -

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;


Saludos.
#154
Muy bien maestro funciona a la perfección, por si alguien quiere correr tu código como Ej. deberías agregarle el prototipo. -

Muchas gracias por tu tiempo, Saludos.
#155
Hola, buen día para todos.
Como se nota en el código pude efectuar un avance pero me falta algo importante y es que no logro retomar la dirección de memoria a main del puntero frases como lo sugería Alberto.
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++;
}
}


PD: En definitiva, lo que me falta es poder imprimir los datos ingresados desde main y no desde la función ingreso.-

Espero puedan ayudarme con esto también.
Saludos.  
#156
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
la solución que escribiste no me funciona, sigue sin compilar.-
Saludos.
#157
Hola, que tengan un muy buen día. -
Continuo con mis dudas pero ante quiero efectuar una aclaración, si consideran que esto de preguntar y preguntar, y no recurrir a un manual a buscar por mí mismo y piensan que eso es lo que debo hacer, todo ben, yo tengo mi criterio formado del porqué continuamente recurro a Uds. para evacuar mis dudas, en definitiva, si este post no tuviera respuesta lo entendería perfectamente y si me pegaran una bofetada psicológica también. -
Dicho esto pasa a consultarles sobre mis dudas.
Intento pasar el ingreso de los datos a una función y tengo (aparentemente) un solo error y esta en la siguiente linea. - 
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;
}

Los dobles punteros son lo que no puedo interpretar, por lo menos en este caso. -
Saludos.
#158
Hola.
Bueno al fin en este día aprendí más de lo esperado, con la primer respuesta pensé que no podría nunca explicar mis dudas, pero todo se fue encaminando, muchas gracias a todos los que me ayudaron en este post.
Espero que ahora este aceptable y me quiero ver encajando todo esto en el otro programa, espero lograrlo.


#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;
}


Saludos.    
#159
Al fin logre que funcione, dejo el código porque además del error que me solucionaste tenía 2 más. -
El incremento de la variable i va al comienzo del bucle y no al final, creo que es porque en la primer iteración valiendo cero i no reservaría memoria. - 
Y el segundo lo producía porque no igualaba a NULL el puntero frases. -

#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;
}


Saludos.
#160
Hola.
Creo que nunca me costo tanto entender un tema como en este caso, tan solo para intentar avanzar me podrían decir que tengo que modificar para que no me del siguiente error.

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;
}

No tendrá mucha relación con el programa que quiero hacer pero trate de hacerlo sencillo para poder entenderlo. -


Saludos.