Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: euroesp en 20 Julio 2016, 12:31 pm



Título: Crear un array de caracteres mediante una funcion.
Publicado por: euroesp en 20 Julio 2016, 12:31 pm
Buenas.

Estoy creando un programa que mediante una funcion y a partir de diferentes cadenas de texto me las una y me devuelva una unica cadena. Me da errores varios y esperaba aque me pudieran ayudar. Les paso el código.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char a,m;
    const char* nombre[12];

    a = '96';
    m = '03';

    nombre = nombre1(m,a);
    printf("%s",nombre);
    return 0;
}

const char* nombre1(char m, char a){

   char nombre[12];

   strcat(nombre,a);
   strcat(nombre,"_");
   strcat(nombre,m);
   strcat(nombre,".15.txt");

   return nombre;

}

Gracias por adelantado.


Título: Re: Crear un array de caracteres mediante una funcion.
Publicado por: AlbertoBSD en 20 Julio 2016, 13:37 pm
falta que inicialices nombre en 0 dentro de la funcion nombre1

Código
  1. char nombre[12]= "";

se podria  hacer tambien con memset, o incluso solo el primer caracter.


Tambien deberias mirar

http://foro.elhacker.net/programacion_cc/cintroducir_una_cadena_en_un_char_ya_inicializado-t453643.0.html;new

http://foro.elhacker.net/programacion_cc/concatenar_cadenas_con_memoria_dinamica_en_lenguaje_c-t454083.0.html;msg2075787

mG8_nY3Yzg4

Otro dato que te falta es

Código
  1. a = '96';
  2.    m = '03';

Al ser char, solo pueden tener un caracter, si quieres que sean cadenas debe de ser comillas dobles. y declararlos como.

 
Código
  1. char *a = "96";

Y tambien la función deberia de ser

Código
  1. const char* nombre1(char *m, char *a){
  2.  

Ya que las funciones de strcat solo trabajan con cadenas

Saludos


Título: Re: Crear un array de caracteres mediante una funcion.
Publicado por: euroesp en 21 Julio 2016, 11:51 am
Buenas,

He leido lo que me dijiste y me ha servido de mucho, muchas gracias; aunque aun me quedaron aglunos errores y dudas. Te adjunto el nuevo codigo:

#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#define dim 3

char *nombre1( char *m, char *a );
int main()
{
    char a[dim] = "",m[dim] = "",d[dim] = "",*nombre2 = NULL;
    int l;

    setbuf(stdout, NULL);
    printf( "dame la a: \n");
    fgets(a, dim, stdin);
    limpiarBuffer(a);

    printf( "dame la m: \n");
    fgets(m, dim, stdin);
    limpiarBuffer(m);

    nombre2 = nombre1(m,a);
    printf("\n %s",nombre2);                   <---------------------   (1)
    return 0;
}

char* nombre1(char* m, char* a){
   size_t totCarac = strlen( m ) + strlen( a ) +8;
   char *nombre = ( char* )malloc( totCarac * sizeof(char) );

   nombre = strcat(a,"_");
   nombre = strcat(nombre,m);
   nombre = strcat(nombre,".15.txt");
   printf("\n %s",nombre);                            <-----------------   (2)

   return nombre;

}

void limpiarBuffer( char cadena[] ){
   char *p = NULL;
   size_t ch;

   if((p=strchr(cadena, '\n'))){
      *p='\0';
   }
   else{
      while((ch = getchar()) !='\n' && ch!=EOF);
   }
}


La duda que tengo es referente a la funcion "LimpiarBuffer", es una funcion que copie de uno de los links que me pasaste y que me evita que me salgan ciertos saltos de linea y espacios que yo no le he especificado, pero realmente no entiendo mucho su funcionamiento, si puedieras explicarmelo te lo agradeceria.

A la hora de compilar, es curioso que en el printf que he marcado con un (2) me escribe perfectamente el string que yo quiero crear, de la forma que, suponiendo que a: 55 y m: 66, devuelve  "55_66.15.txt", pero sin embargo, al escribirlo en el printf marcado con un (1) solo escribe "55_) a", y no consigo repararlo.

Gracias por adelantado.


Título: Re: Crear un array de caracteres mediante una funcion.
Publicado por: NOB2014 en 21 Julio 2016, 15:40 pm
Hola.
No tengo tiempo en este momento para explicarte soble esa función, pero fíjate que tiene mucho que ver con la imagen.

(http://i63.tinypic.com/35d6c5i.png)

Saludos.


Título: Re: Crear un array de caracteres mediante una funcion.
Publicado por: AlbertoBSD en 21 Julio 2016, 16:11 pm
El erro esta en que aunque si reservas memoria para el nombre en la función.

Posteriormente reasignas el apuntador de nombre al valor del buffer a.

Deberia de quedar asi.

Código
  1. char *nombre = ( char* )calloc( totCarac , sizeof(char) );
  2.  
  3.   nombre = strcat(nombre, a);
  4.   nombre = strcat(nombre,m);
  5.   nombre = strcat(nombre,".15.txt");
  6.   printf("\n %s",nombre);


Título: Re: Crear un array de caracteres mediante una funcion.
Publicado por: NOB2014 en 21 Julio 2016, 16:29 pm
Hola.

Código
  1. void limpiarBuffer( char cadena[] ){
  2. char *p = NULL;
  3. size_t ch;
  4.  
  5. if((p=strchr(cadena, '\n'))){ //LB01
  6. *p='\0';
  7. }
  8. else{
  9. while((ch = getchar()) !='\n' && ch!=EOF);  //LB02
  10. }
  11. }

/*
LB01
   strchr busca un carácter dentro de una cadena, si lo encuentra devuelve la dirección en memoria
    donde se encuentra el carácter , en este caso '\n' (Enter) si lo encuentra lo remplaza por '\0' que es el carácter que marca el final de cadena en C.

LB02
   Si no lo encuentra es que en el buffer del teclado han quedado caracteres sin leer, con este bucle
   y la función getchar el buffer queda limpio, sin nada pendiente de lectura.-

Faltaria explicarte que pasa si el buffer queda con pendientes pero eso lo tengo entendido pero no me da para explicartelo.

Saludos.


Título: Re: Crear un array de caracteres mediante una funcion.
Publicado por: euroesp en 28 Julio 2016, 19:37 pm
¡Gracias a todos por sus aportes, me han ayudado mucho!