Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

187
Visualizações
convirtiendo cadena en tiempo usando sscanf

Estoy tratando de convertir la cadena de tiempo en formato de tiempo en C en Windows. Como solo tengo horas, minutos y segundos en mi cadena, intenté analizar la cadena usando sscanf en formato de hora y luego usé mktime. Pero de alguna manera no lo está convirtiendo en formato de tiempo. Para verificar, traté de imprimir el tiempo convertido en una cadena. El código se parece a:

 struct tm tm; char time_buffer[100]; int hh, mm; float ms; time_t time_value; char *timestamp = {"16:11:56.484"}; sscanf(timestamp, "%d:%d:%f", &hh, &mm,&ms); tm.tm_hour =hh; tm.tm_min = mm; tm.tm_sec = ms*1000; tm.tm_isdst = -1; time_value = malloc(100*sizeof(char)); time_value = mktime(&tm); if (time_value==-1) printf ("unable to make time"); strftime(time_buffer, sizeof(time_buffer), "%c", &tm); printf(time_buffer);
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

  1. no inicializa su struct tm , sino que solo configura tm_hour , tm_min , tm_sec y tm_isdst . Todos los demás campos no se inicializan y, por lo tanto, tienen valores desconocidos o indefinidos.
  2. Si inicializara su struct tm con un memset(&tm, 0, sizeof(tm)) , probablemente aún recibiría un error porque los campos contenidos en la estructura no permiten 0 como valor válido ( tm_mday ). Consulte los documentos como referencia.
  3. Es probable que el valor que ingresa en tm_sec no sea válido. En realidad, desea que sea ms/1000 , no ms*1000 .
over 4 years ago · Santiago Trujillo Relatório

0

Antes de llamar a mktime() , el código debe inicializar más de 7 campos de tm_struct() : year, month,day, hour min, sec, isdst y potencialmente otros.

2 excepciones: .tm_yday, .tm_wday no necesitan asignación antes de llamar a mktime() .

El año, el mes y el día deben establecerse en algo razonable: usemos el 1 de enero de 2000. Alternativamente, el código podría usar time_t() para obtener el día de hoy.

El código usa ms insinuando que el valor está en milisegundos. No lo es. Todavía está en segundos.

Utilice la variable time_t local en lugar de asignar una. malloc() no es necesario.

 struct tm tm = {0}; tm.tm_year = 2000 - 1900; // Years from 1900 tm.tm_mon = 1 - 1; // Months from January tm.tm_mday = 1; char time_buffer[100]; int hh, mm; float ss; time_t time_value; char *timestamp = "16:11:56.484"; if (sscanf(timestamp, "%d:%d:%f", &hh, &mm,&ss) != 3) Handle_BadData(); tm.tm_hour = hh; tm.tm_min = mm; tm.tm_sec = roundf(ss); // or simply = ss; tm.tm_isdst = 0; // Keep in standard time // time_value = malloc(100*sizeof(char)); time_value = mktime(&tm); if (time_value == -1) { printf ("unable to make time"); } else { strftime(time_buffer, sizeof(time_buffer), "%c", &tm); printf(time_buffer); } // Sat Jan 1 16:11:56 2000
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda