Autor
|
Tema: Cadenas de caracteres , Puntero mas Dudas !! (Leído 1,913 veces)
|
bash
Desconectado
Mensajes: 258
|
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 : #include <iostream> #include <cstring> #include <stdlib.h> using namespace std; struct Campos { char *campo1;//10 era un array de 10 campos y como quiera char campo2[16]; char campo3[7]; char campo4[8]; char campo5[6]; char campo6[21]; }; char datos[] ="SOLOESTO..0000000000000000000 0000000 000000000 0000.0 00000-00-10011:00:00 "; int main(){ Campos cmp1; memset(&cmp1, 0x00, sizeof(Campos)); char *token = strtok(datos , " "); while(token != NULL) { cout << " "<<endl<< token; token = strtok(NULL, " "); } int iteraciones= 0; cout << "iteraciones ----------------------------------------"; for( ; iteraciones < 11; iteraciones++) { if(iteraciones < 12) { strncat(cmp1.campo1,&token[iteraciones], 1); cout << cmp1.campo1; } } }
Gracias !!
|
|
« Última modificación: 24 Mayo 2015, 17:05 pm por bash »
|
En línea
|
gracias por responder mis dudas
|
|
|
Stakewinner00
|
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
Mensajes: 10
|
podes cambiar esto: int iteraciones= 0; for( ; iteraciones < 11; iteraciones++)
por 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.htmVes 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
Mensajes: 258
|
ya arregle la condicion OntheCore !! Stakewinner00: le puse & por la declaracion dentro del header mira lo que dice _CRTIMP char* __cdecl __MINGW_NOTHROW strncat (char*, const char*, size_t);
a parte le hize un cambio al codigo #include <iostream> #include <cstring> #include <cstdlib.h> using namespace std; struct Campos { char campo1[10];//10 char campo2[16]; char campo3[7]; char campo4[8]; char campo5[6]; char campo6[21]; }; char datos[] ="SOLOESTO..0000000000000000000 0000000 000000000 0000.0 00000-00-10011:00:00 "; int main(){ Campos cmp1; memset(&cmp1, 0x00, sizeof(Campos)); char token2[2000]; char *token = strtok(datos , " "); while(token != NULL) { cout << " "<<endl<< token; /////AQUI strcat(token2, token ); token=strtok(NULL, " "); strcat(token2, token ); //// AQUI .... } cout <<token2; cout<< " token : \n"<<token<<endl; cout << "\niteraciones ----------------------------------------"; for(int iteraciones= 0; iteraciones < 11; iteraciones++) { if(iteraciones < 11) { strncat(cmp1.campo1,token[iteraciones], 1);////en esta iteracion solo quiero copiar un caracter cout << cmp1.campo1; } } }
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
|
Piensa que pasa y porque pasa si haces algo como char* c = NULL; &c;
|
|
|
En línea
|
|
|
|
bash
Desconectado
Mensajes: 258
|
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 : char datos[] ="SOLOESTO..0000000000000000000 0000000 000000000 0000.0 00000-00-10011:00:00 "; int main(){ char *b; b =(char*)malloc(1000); for(int i= 0; i < strlen(datos); i++) if( i < 10) strncat(b, &datos[i],1); cout<<b; free(b); }
Modicado while( (ptr = strtok( NULL, s2 )) != NULL ) // Posteriores llamadas strncat(s, ptr,20);
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cadenas de caracteres
« 1 2 »
Programación C/C++
|
Angel Zero
|
10
|
9,074
|
4 Junio 2011, 18:38 pm
por Angel Zero
|
|
|
Cadenas de caracteres solucionado
Programación General
|
malocha
|
0
|
1,864
|
18 Julio 2011, 00:18 am
por malocha
|
|
|
Cadenas de caracteres
Programación C/C++
|
carmelina
|
2
|
2,367
|
7 Mayo 2012, 03:46 am
por andres_5
|
|
|
Duda con puntero a arreglo de caracteres
Programación C/C++
|
dato000
|
5
|
4,810
|
30 Noviembre 2012, 21:13 pm
por xiruko
|
|
|
Problema con asignación de memoria en puntero de caracteres.
Programación C/C++
|
1t4h1s4
|
9
|
5,250
|
13 Febrero 2013, 02:58 am
por 1t4h1s4
|
|