سؤال

أحتاج إلى الحصول على الوقت الحالي في "HH: MM: SS" -Format في صفيف حرف (سلسلة) حتى أتمكن من إخراج النتيجة في وقت لاحق ببساطة مع printf("%s", timeString);

أنا مرتبك جدا على timeval و time_t أنواع راجع للشغل، لذلك فإن أي تفسير سيكون رائعا :)

تحرير: لذلك حاولت مع Straftime وما إلى ذلك، وعمل كيندا. هنا هو رمزي:

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);

لكن الناتج هو: "13: 49: 53a ؟؟

ما يجري مع "a ؟؟ j`as؟" في نهايةالمطاف؟

هل كانت مفيدة؟

المحلول

يمكنك الحصول على القمامة من هذا الرمز:

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);

نظرا لأنك لا تسمح للمساحة بمفرج NULL ( 0) على السلسلة، فما عند طباعة السلسلة، فإنه لا يعرف المكان الذي تكون فيه النهاية وأدوات القمامة العشوائية في القليل من الذاكرة كجزء من السلسلة وبعد

تغييره إلى هذا:

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);

وسوف تعمل بشكل صحيح ل strftime() سيكون لديك مساحة كافية لإضافة a 0. لاحظ أن أنا أستخدم SizeOf (صفيف) لتجنب نسيان المخاطر لتغيير الرقم في كلا المكانين.

نصائح أخرى

نلقي نظرة على straftime. وظيفة، والتي تتيح لك كتابة الوقت في صفيف سحر مع تنسيق من اختيارك.

#include <stdio.h>
#include <time.h>

/* get seconds since the Epoch */
time_t secs = time(0);

/* convert to localtime */
struct tm *local = localtime(&secs);

/* and set the string */
sprintf(timeString, "%02d:%02d:%02d", local->tm_hour, local->tm_min, local->tm_sec);

الأنواع المهمة للتعامل مع الوقت (نوع الحائط من الوقت، وليس عملية / وقت الموضوع) time_t و struct tm.
مع بعض العمل، يمكنك التحويل بين واحد والآخر، ولكن عليك الانتباه إلى التوقيت المحلي مقابل وقت UTC.

بروس وصف ل <time.h>, ، جرب الوظائف هناك حتى يفهم باستفاضة الوقت في جيم

مرة أخرى، انتبه إلى وقت UTC والوقت المحلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top