Pregunta

Me necesita para obtener la hora actual en una "HH: MM: SS" -format en una matriz de caracteres (string) para que yo pueda enviar el resultado más tarde, simplemente con un printf("%s", timeString);

Estoy bastante confusa en los timeval y time_t tipos cierto, por lo que cualquier explicación sería impresionante:)

EDIT: Así que he intentado con strftime etc, y poco trabajado. Aquí está mi código:

time_t current_time;
struct tm * time_info;
char timeString[8];

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);

Sin embargo, la salida es la siguiente: "13: 49: 53a ?? J`aS"

¿Qué está pasando con el " una ?? J`aS? " al final?

¿Fue útil?

Solución

Te estás poniendo la basura de este código:

time_t current_time;
struct tm * time_info;
char timeString[8];

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);

Debido a que usted no está dejando espacio para un terminador nulo (\ 0) en la cadena, por lo que cuando la cadena impreso, que no sabe donde el fin es la basura y inteprets azar en el siguiente bit de la memoria como parte de la cadena.

Cambiar a esto:

time_t current_time;
struct tm * time_info;
char timeString[9];  // space for "HH:MM:SS\0"

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, sizeof(timeString), "%H:%M:%S", time_info);
puts(timeString);

Y va a trabajar correctamente porque strftime() tendrá espacio suficiente para añadir un \ 0. Tenga en cuenta que estoy usando sizeof (matriz) para evitar el riesgo de olvidarse de cambiar el número en ambos lugares.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top