elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / No devolver nunca punteros a variables locales a una función en c en: 11 Abril 2018, 00:35 am
No entiendo muy bien este concepto y he estado pensando acerca del tema.
Citar
Aclarar que el codigo funciona pero no estoy seguro de que sea correcto



Código:
#include <stdio.h>

int* funcion ()
{
    int resultado=9; //variable local de la funcion, al acabar la funcion se pierde el dato
    int*puntero=&resultado; //cuando termine la funcion puntero no sabra a donde apuntar

    return *puntero; //devuelvo el valor de resultado
}

int main(int argc, char *argv[])
{
    int* p=funcion();
    printf("%i",p); //9

    return 0;
}

Si he comentado mal el programa por favor comentenlo, yo creo que aunque funcione seria incorrecto, porque una vez acabe la funcion, puntero no sabra a donde apuntar y podrian sobreescribirse direcciones de memoria. Ustedes que opinan?
2  Programación / Programación C/C++ / Devolver una cadena pasada como argumento a una funcion en: 9 Abril 2018, 01:26 am
Citar
tengo este code y el problema es que solo me imprime una h
Código:
#include <stdio.h>

char imprimir_cadena(const char *cadena2);

int main(){

   const char *ptr="hola";

   const char *p=imprimir_cadena(ptr);

   printf("%s",&p);

   return 0;

}

char imprimir_cadena(const char *cadena2){

    return *cadena2; //el asterico * es opcional?


}

Citar
Y porque este funciona?
Código:
#include <stdio.h>

char imprimir_cadena(const char *cadena2);

int main(){

   const char *ptr="hola";

   const char *p=imprimir_cadena(ptr);

   printf("%s",(&p)[1]); //esta parte no la entiendo

   return 0;

}

char imprimir_cadena(const char *cadena2){

    return cadena2;


}
3  Programación / Programación C/C++ / Punteros a cadenas dinamicas en: 7 Abril 2018, 14:35 pm
-La idea que tenia que no la he podido implementar pero dudo que se pueda, es que al pedir un nombre y apellido al usuario a priori NO SABEMOS cual va a ser la longitud de stdin que teclee el usuario. En la linea del malloc puse 10 por poner como pude haber puesto 20 pero en realidad no se cuanto va a ocupar el nombre y el apellido que me ingrese el usuario por teclado no se como implementarlo de tal manera que cuando se teclee un nombre y un apellido se calcule la longitud y luego ya reservar memoria para esa longitud a parte tambien para reservar la memoria justa y necesaria para lo que me teclee el usuario y no andar a ciegas suponiendo que va ingresar un nombre y apellido de 10,20,30 etc bytes

-Como no me salio la idea hice esto que no se parece en nada a mi idea y que aun por encima no consigo hacer que funcione
Espero haberme explicado con claridad y gracias
Citar
Primera duda, porque el codigo no funciona?
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
    char *nombre,*nombre2;
    nombre=malloc(10*sizeof(char)); //reservo 10 bytes
    printf("Introduce tu nombre y apellido: ");

    fgets(nombre,9,stdin); //agrega NULL y \n si se ingresan menos caracteres
    if (nombre[strlen(nombre)-1] == '\n'){
        nombre[strlen(nombre)-1] = '\0';
    }

    printf("%s\n",nombre);

    long int longitud=(strlen(nombre)+1); //strlen no cuenta el NULL de final de cadena
    printf("%li\n",longitud);

    if(longitud>8){
       nombre2=realloc(nombre,15*sizeof(char)); //reasigno 5 bytes
       printf("%s\n",nombre);
       free(nombre2);

     }
     free(nombre);


    return 0;
}

Citar
Segunda duda, seria posible hacer la idea?

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines