1

Estoy intentando hacer un código que saca los valores de una cadena de caracteres y los quiero guardar en un array de cadenas, entonces lo que hice fue definir un arreglo de punteros para guardar los diferentes valores allí, pero al hacerlo e imprimir siempre imprime el último dato. No sé si estoy leyendo mal el contenido que hay en los punteros o que puedo hacer, muchas gracias El código es:

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

int main (void)
{
    int cont=0, cont2=0, cont3=0, len=0, band=0;
    char cadena_num[20];
    char *vector_ref_tol[5];
    char datos2[]="{\"estado\":\"200 ok\",\"carnet\":\"2151022\",\"velocidad\":1719,\"frecuencia\":55.34,\"voltaje\":216.28,\"temperatura\":35.53,\"tiempo_init_op\":1621055844824}";
    printf("%s\n", datos2);
    len=strlen(datos2);
    for(cont=0; cont<len; cont++)
          {
              if(datos2[cont]==':' )
              {
                    cont3=cont+1;
                    band++;
              while(datos2[cont3]!=',' && datos2[cont3]!='}' && band>2)
                  {
                    cadena_num[cont2]=datos2[cont3];
                    cont2++;
                    cont3++;
                  }
                  cont2=0;
                  if(band>2 && band<=7)
                  {
                     
                      vector_ref_tol[band-3]=cadena_num;
                      printf("%s \n", vector_ref_tol[band-3]);
                  }
                  
                  cont=cont3;
  
              }
  
          }
    for(cont=0; cont<5; cont++)
    
    {
        printf("%s",vector_ref_tol[cont] );
    }
    
    

1 Answers1

1

Tu código es un galimatías ininteligible mal sangrado, con una pésima elección de nombres de variables y en el lenguaje equivocado. No me extraña que tengas dificultades para obtener el comportamiento que esperas pues es tremendamente difícil entender lo que haces.

Dado que has etiquetado la pregunta como , has tomado decisiones incorrectas en:

  • Cabeceras: Las cabeceras <stdio.h>, <string.h> y <stdlib.h> son de y no deben usarse en C++, lee este hilo para saber más del tema.
  • Definición de main: En C++ las funciones que no reciben parámetros, se definen con una lista de argumentos vacía, no con una lista con void como único parámetro.
  • Manejo del texto: En C++ el texto se maneja con el objeto std::string no con formaciones de caracteres.
  • Comunicación con la consola: En C++ se usan los objetos de flujo de datos std::cin y std::cout para leer y escribir en la consola, las herramientas printf y scanf son de C.

Usando las herramientas adecuadas, tu código puede reducirse a esto:

std::string datos = "{\"estado\":\"200 ok\",\"carnet\":\"2151022\",\"velocidad\":1719,\"frecuencia\":55.34,\"voltaje\":216.28,\"temperatura\":35.53,\"tiempo_init_op\":1621055844824}";

for (auto inicio = datos.find(':'), fin = datos.find_first_of(",}", inicio);
    inicio != std::string::npos;
    inicio = datos.find(':', fin), fin = datos.find_first_of(",}", inicio))
{
    std::cout << "Dato: " << datos.substr(inicio + 1, fin - inicio - 1) << '\n';
}

Puedes ver el código funcionando en Try it online!.

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82