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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cadenas de caracteres , Puntero mas Dudas !!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cadenas de caracteres , Puntero mas Dudas !!  (Leído 1,653 veces)
bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Cadenas de caracteres , Puntero mas Dudas !!
« en: 24 Mayo 2015, 16:52 pm »

Buenas a todos !!
vuelvo con otras dudas sobre esto de las cadenas ahora tengo una duda que me surgio sobre esto  usar las funciones de string.h  

ahora le toca a strcat , ahora tengo una estructura de y quiero copiar varios campos que son punteros o son arreglos y el resultado es el mismo , el programa crash  voy a poner el codigo  :

Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6.  
  7. struct Campos {
  8.  char *campo1;//10 era un array de 10 campos y como quiera
  9.  char campo2[16];
  10.  char campo3[7];
  11.  char campo4[8];
  12.  char campo5[6];
  13.  char campo6[21];
  14.  
  15.  
  16. };
  17.  
  18. char datos[] ="SOLOESTO..0000000000000000000     0000000   000000000     0000.0  00000-00-10011:00:00 ";
  19.  
  20. int main(){
  21.   Campos cmp1;
  22.   memset(&cmp1, 0x00, sizeof(Campos));
  23.  char *token = strtok(datos , " ");
  24.  while(token != NULL)
  25.  {
  26.     cout << " "<<endl<< token;
  27.     token = strtok(NULL, " ");
  28.  
  29.  }
  30.  int iteraciones= 0;
  31.  
  32.   cout << "iteraciones ----------------------------------------";
  33.  for( ; iteraciones < 11; iteraciones++)
  34.  {
  35.  
  36.    if(iteraciones < 12)
  37.    {
  38.      strncat(cmp1.campo1,&token[iteraciones], 1);
  39.      cout << cmp1.campo1;
  40.    }
  41.  
  42.  
  43.  
  44.  }
  45.  
  46.  
  47. }
  48.  

Gracias !!


« Última modificación: 24 Mayo 2015, 17:05 pm por bash » En línea

gracias por responder mis dudas
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Cadenas de caracteres , Puntero mas Dudas !!
« Respuesta #1 en: 24 Mayo 2015, 17:08 pm »

si te fijas al intentar hacer &token[n], token es NULL y no puede acceder a esa memoria

si es C++ estas usando una lib de C stdlib.h que tendría que ser cstdlib y en el for tendrías que meter el int iteraciones = 0 dentro del for.

a parte que el if de dentro del for es inútil


« Última modificación: 24 Mayo 2015, 17:12 pm por Stakewinner00 » En línea

OnTheCore

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Cadenas de caracteres , Puntero mas Dudas !!
« Respuesta #2 en: 24 Mayo 2015, 17:15 pm »

podes cambiar esto:
Código:
int iteraciones= 0;
for( ; iteraciones < 11; iteraciones++)
por
Código:
for(int interaciones = 0; iteraciones , 11; iteraciones++)

el "if(iteraciones < 12)" esta de mas, es obvio que si el bucle for va de 0 a 11 siempre va a ser menor que 12.

Tenes que hacer todo en el bucle while, el segundo for esta de mas.
strtok retorna un puntero al inicio de los datos separados por cada iteracion, entonces vos lo que tenes que hacer es copiar ese dato directamente a la estructura.

No se si me explico. Mira este ejemplo: http://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm

Ves como imprime cada dato separado con printf? bueno, vos en vez de imprimirlo tenes que copiarlo al campo de la estructura que quieras.
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: Cadenas de caracteres , Puntero mas Dudas !!
« Respuesta #3 en: 24 Mayo 2015, 17:26 pm »

ya arregle la condicion OntheCore !!
 

Stakewinner00: le puse & por la declaracion dentro del header mira lo que dice
Código
  1. _CRTIMP char* __cdecl __MINGW_NOTHROW strncat (char*, const char*, size_t);

a parte le hize un cambio

al codigo
Código
  1.  
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdlib.h>
  5. using namespace std;
  6.  
  7.  
  8. struct Campos {
  9.  char campo1[10];//10
  10.  char campo2[16];
  11.  char campo3[7];
  12.  char campo4[8];
  13.  char campo5[6];
  14.  char campo6[21];
  15.  
  16.  
  17. };
  18.  
  19. char datos[] ="SOLOESTO..0000000000000000000     0000000   000000000     0000.0  00000-00-10011:00:00 ";
  20.  
  21. int main(){
  22.   Campos cmp1;
  23.   memset(&cmp1, 0x00, sizeof(Campos));
  24.   char token2[2000];
  25.  char *token = strtok(datos , " ");
  26.  while(token != NULL)
  27.  {
  28.     cout << " "<<endl<< token;
  29.  
  30. /////AQUI
  31.     strcat(token2, token );
  32.      token=strtok(NULL, " ");
  33.      strcat(token2, token );
  34. //// AQUI ....
  35.  
  36.  }
  37.  
  38.  cout <<token2;
  39.  
  40.  
  41. cout<< " token : \n"<<token<<endl;
  42.   cout << "\niteraciones ----------------------------------------";
  43.  for(int iteraciones= 0;  iteraciones < 11; iteraciones++)
  44.  {
  45.  
  46.    if(iteraciones < 11)
  47.    {
  48.      strncat(cmp1.campo1,token[iteraciones], 1);////en esta iteracion solo quiero copiar                   un caracter
  49.      cout << cmp1.campo1;
  50.    }
  51.  
  52.  
  53.  
  54.  }
  55.  
  56. }
  57.  
  58.  
  59.  
Me asegure de darle 2000 campos para ver si no falla pero falla como quiera.
« Última modificación: 24 Mayo 2015, 17:28 pm por bash » En línea

gracias por responder mis dudas
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Cadenas de caracteres , Puntero mas Dudas !!
« Respuesta #4 en: 24 Mayo 2015, 17:31 pm »

Piensa que pasa y porque pasa si haces algo como
char* c = NULL;
&c;
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: Cadenas de caracteres , Puntero mas Dudas !!
« Respuesta #5 en: 24 Mayo 2015, 17:58 pm »

si te entiendo pero existe una forma de copiar el token en otra cadena

use strcpy , memcpy ... y el resultado fue el mismo . pienso que es por q al final strtok devuelve el ultimo token como nulo pero tambien el hize una comparacion y nada.
dime si me equivoco , tambien estoy tratando con algo como lo siguiente que si copa pero
al final salen caracteres que no  estan en la cadena , por que pasa eso ?
mira el codigo :


Código
  1. char datos[] ="SOLOESTO..0000000000000000000     0000000   000000000     0000.0  00000-00-10011:00:00 ";
  2.  
  3. int main(){
  4.   char *b;
  5.   b =(char*)malloc(1000);
  6.   for(int i= 0; i < strlen(datos); i++)
  7.     if( i < 10)
  8.        strncat(b, &datos[i],1);
  9.  
  10.     cout<<b;
  11.     free(b);
  12.  
  13.  
  14. }


Modicado
 
Código
  1. while( (ptr = strtok( NULL, s2 )) != NULL )    // Posteriores llamadas
  2.     strncat(s, ptr,20);
  3.  
esto si funciona aunque aun me manda caracteres raros , por que  ?

Gracias !!
« Última modificación: 24 Mayo 2015, 18:10 pm por bash » En línea

gracias por responder mis dudas
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cadenas de caracteres « 1 2 »
Programación C/C++
Angel Zero 10 8,569 Último mensaje 4 Junio 2011, 18:38 pm
por Angel Zero
Cadenas de caracteres solucionado
Programación General
malocha 0 1,681 Último mensaje 18 Julio 2011, 00:18 am
por malocha
Cadenas de caracteres
Programación C/C++
carmelina 2 2,084 Último mensaje 7 Mayo 2012, 03:46 am
por andres_5
Duda con puntero a arreglo de caracteres
Programación C/C++
dato000 5 4,556 Último mensaje 30 Noviembre 2012, 21:13 pm
por xiruko
Problema con asignación de memoria en puntero de caracteres.
Programación C/C++
1t4h1s4 9 4,880 Último mensaje 13 Febrero 2013, 02:58 am
por 1t4h1s4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines