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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con un codigo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con un codigo  (Leído 1,476 veces)
MRx86

Desconectado Desconectado

Mensajes: 88


Math's the way to do philosophy with the universe


Ver Perfil
ayuda con un codigo
« en: 22 Enero 2017, 22:22 pm »

hola, estaba haciendo el siguiente programa:

Código
  1.  
  2. #include  <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #define STRMAXLEN 256
  7.  
  8. int convert (char **buffer, const char *src);
  9. int wordsof (const char *src);
  10. int nextstrinstr (const char *str, char *buffer, int *pos);
  11.  
  12. int convert (char **buffer , const char *src)
  13. {
  14. int words = wordsof (src);
  15. unsigned int i;
  16. int strpos = 0;
  17. char strbuff[STRMAXLEN];
  18.  
  19.  
  20. buffer = (char **) malloc (sizeof (char *) * words);
  21.  
  22. for (i = 0; i < words; i++)
  23. {
  24. nextstrinstr (src, strbuff, &strpos);
  25. strcpy (buffer[i], strbuff);
  26. }
  27.  
  28. return words;
  29. }
  30.  
  31. int wordsof (const char *src)
  32. {
  33. unsigned int i, num = 0;
  34.  
  35. for (i = 0; i < strlen (src); i++)
  36. if (src [i] == ' ') num++;
  37.  
  38. ++num;
  39.  
  40. return num;
  41. }
  42.  
  43. int nextstrinstr (const char *str, char *buffer, int *pos)
  44. {
  45. //iterador sobre la cadena str
  46. unsigned int i = *pos;
  47.  
  48. //iterador sobre la cadena buffer
  49. int j = 0;
  50.  
  51. for (i, j; str [i] != ' '; i++, j++)
  52. {
  53. buffer [j] = str [i];
  54. }
  55.  
  56. buffer [j] = '\0';
  57.  
  58. ++i;
  59.  
  60. *pos = i;
  61. return j;
  62. }
  63.  
  64. int main ()
  65. {
  66. const char *s = "cadena_uno cadena_dos cadena_tres cadena_cuatro cadena_cinco";
  67. char **ss;
  68.  
  69. convert (ss, s);
  70. }
  71.  
  72.  

y bueno esto es lo que hace (al menos lo que deberia hacer):

simplemente convierte de un puntero a una cadena de caracteres, a un puntero a punteros a cadenas de caracteres (casi como el metodo split de python, la diferencia es que el de python si funciona correctamente jaja..).

lo que deberia hacer es que desde la cadena

Código
  1.  
  2. const char *s = "cadena_uno cadena_dos cadena_tres cadena_cuatro cadena_cinco";
  3.  
  4.  

genere la cadena

Código
  1.  
  2. char **ss = {"cadena_uno",
  3.                    "cadena_dos",
  4.                    "cadena_tres",
  5.                    "cadena_cuatro ",
  6.                    "cadena_cinco"
  7.                    };
  8.  
  9.  

pero me lanza el codigo de error 255 (lo busque en google y no aparece nada, aparecen cosas que no son)

espero que me puedan ayudar...

pd: el compilador es dev-c++ y el OS es Windows 10.

Saludos.


En línea

"Tengo una pregunta que a veces me tortura: ¿Estoy loco
yo, o los locos son los demas?"
- Albert Einstein
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: ayuda con un codigo
« Respuesta #1 en: 24 Enero 2017, 00:22 am »

A ver si te sirve esto. Está en C, compila en GCC.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void crear_lista(char ***lista, const char *origen) {
  6.    char *palabra;
  7.    char **l;
  8.    char *delimitadores = " \t";
  9.    char *copia;
  10.    unsigned i = 0;
  11.  
  12.    // Guarda para saber si origen está vacío.
  13.    if(origen == NULL) {
  14.        *lista = NULL;
  15.        return;
  16.    }
  17.  
  18.    // Una copia no constante de origen para strtok
  19.    copia = malloc((strlen(origen) + 1) * sizeof(char));
  20.    strcpy(copia, origen);
  21.  
  22.    // Se saca la primera palabra de origen
  23.    palabra = strtok(copia, delimitadores);
  24.  
  25.    // Se genera espacio para guardar un elemento en la lista
  26.    l = malloc(sizeof(char *));
  27.  
  28.    // Se genera espacio para guardar la primera palabra...
  29.    l[i] = malloc((strlen(palabra)+1) * sizeof(char));
  30.    // y se guarda
  31.    strcpy(l[i], palabra);
  32.  
  33.    // Se avanza el puntero de la lista en una posición
  34.    ++i;
  35.  
  36.    // Mientras queden palabas en origen
  37.    while((palabra = strtok(NULL, delimitadores))) {
  38.        // Se repiten los pasos anteriores. El uso de realloc
  39.        // es por que se redimensiona la lista.
  40.        l = realloc(l, sizeof(char *) * i+1);
  41.        l[i] = malloc((strlen(palabra)+1) * sizeof(char));
  42.        strcpy(l[i], palabra);
  43.        ++i;
  44.    }
  45.  
  46.    // Se libera la variable copia.
  47.    free(copia);
  48.  
  49.    // Para terminar una última redimensión...
  50.    l = realloc(l, sizeof(char *) * i+1);
  51.    // para alojar el valor nulo que marca el fin de la lista.
  52.    l[i] = NULL;
  53.  
  54.    // Se guarda la lista en la variable del parámetro de la función.
  55.    *lista = l;
  56. }
  57.  
  58. void liberar_lista(char ***lista) {
  59.    int i;
  60.  
  61.    // Si no hay nada que liberar regresa.
  62.    if(!*lista) return;
  63.  
  64.    // Por cada elemento en la lista...
  65.    for(i = 0; lista[i]; ++i)
  66.        // liberar esa posición.
  67.        free((*lista)[i]);
  68.  
  69.    // Se libera la lista.
  70.    free(*lista);
  71.  
  72.    // Se marca nula la lista en la variable
  73.    // del parámetro de la función y así indicar
  74.    // que dicha variable está libre para usarse
  75.    // de nuevo.
  76.    *lista = NULL;
  77. }
  78.  
  79. int main() {
  80.    const char *s = "cadena_uno cadena_dos cadena_tres cadena_cuatro cadena_cinco";
  81.    char **ss;
  82.    int i;
  83.  
  84.    crear_lista(&ss, s);
  85.  
  86.    for(i = 0; ss[i]; ++i)
  87.        printf("%s\n", ss[i]);
  88.  
  89.    liberar_lista(&ss);
  90. }


« Última modificación: 24 Enero 2017, 00:24 am por MAFUS » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con codigo en C (no me ejecuta un for y necesito ayuda) « 1 2 3 »
Programación C/C++
Søra 22 11,503 Último mensaje 22 Mayo 2010, 00:22 am
por Littlehorse
¿Cuál es la diferencia entre código objeto, código máquina y código binario?
Programación General
Aikanáro Anário 9 28,902 Último mensaje 23 Diciembre 2010, 15:19 pm
por pucheto
ayuda codigo
Programación C/C++
kunai 3 2,482 Último mensaje 1 Junio 2011, 12:56 pm
por Akai
ayuda!! necesito ayuda con este pequeño codigo en c++
Programación C/C++
giraffe 1 4,678 Último mensaje 27 Mayo 2015, 06:25 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines