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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Crear un array de caracteres mediante una funcion.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear un array de caracteres mediante una funcion.  (Leído 3,573 veces)
euroesp

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Crear un array de caracteres mediante una funcion.
« 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.


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Crear un array de caracteres mediante una funcion.
« Respuesta #1 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



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


« Última modificación: 20 Julio 2016, 13:48 pm por AlbertoBSD » En línea

euroesp

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Crear un array de caracteres mediante una funcion.
« Respuesta #2 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.
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Crear un array de caracteres mediante una funcion.
« Respuesta #3 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.



Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Crear un array de caracteres mediante una funcion.
« Respuesta #4 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);
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Crear un array de caracteres mediante una funcion.
« Respuesta #5 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.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
euroesp

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Crear un array de caracteres mediante una funcion.
« Respuesta #6 en: 28 Julio 2016, 19:37 pm »

¡Gracias a todos por sus aportes, me han ayudado mucho!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Separación de caracteres en Strings y guardado en array
Java
Debci 4 6,065 Último mensaje 18 Septiembre 2009, 06:39 am
por Skeletron
Problemas con array (unidimencional) de caracteres [C++]
Programación C/C++
.:BlackCoder:. 5 4,301 Último mensaje 20 Mayo 2010, 23:11 pm
por .:BlackCoder:.
[C] Devolver array bidimensional mediante una función « 1 2 »
Programación C/C++
crawler! 12 21,717 Último mensaje 24 Junio 2013, 22:00 pm
por crawler!
[C] Funcion regresa array de caracteres
Programación C/C++
edr89 3 2,768 Último mensaje 9 Octubre 2013, 08:53 am
por eferion
Acceder a los caracteres de un array de punteros
Programación C/C++
David8 5 2,255 Último mensaje 6 Mayo 2014, 12:24 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines