Не правильно копируется строка

Я пишу функцию которая должна спарсить страничку и вернуть дату и время в виде строки.Страница нормально парсится,находится вхождение строки с датой,записываю в time1 адрес первого символа времени,и копирую из time1 8 символов в time,то есть время(xx:xx:xx=8символов),но когда возвращаю time или date,то помимо даты записывается какой то еще мусор,по типу 28-02-2020R-ю,почему? И еще почему у меня компилятор ругается на strncpy или memcpy,пишет что time1 или date1 может быть NULL,что неприемлемо для функции,я ведь добавил проверку,чтобы time1 или date1 не равнялись NULL

string getDateTime()
{
    char time[8];
    char date[10];
    IStream* pStream = NULL;
    URLOpenBlockingStream(NULL, L"https://bilet.pp.ru/calculator_rus/tochnoe_moskovskoe_vremia.php", &pStream, 0, NULL);
    if (pStream == NULL)
    {
        return "error connection"; //ошибка подключения
    }

    char buf[6000];
    buf[4999] = '\0';
    ULONG sz = 0;
    pStream->Read(buf, size(buf), &sz);
    char* time1;
    char* date1;
    strstr(buf, "Время в Москве:") == NULL ? time1 = NULL : time1 = strstr(buf, "Время в Москве:") + 23; //Если у нас нет подстроки,то strstr вернет NULL и прибавит 23,что является ошибкой
    strstr(buf, "Дата сегодня") ==NULL? date1 = NULL : date1 = strstr(buf, "Дата сегодня") + 21;
    if (time1 == NULL || date1 == NULL)
        return "error date find";

    //memcpy(&date, date1, sizeof(char) * 10);
    //memcpy(&time, time1,sizeof(char)*8);
    strncpy(time, time1, 8);
    strncpy(date, date1, 10);
    cout << date << "  ";

    return "OK";
}

Ответы (1 шт):

Автор решения: Harry

Потому что

strncpy(time, time1, 8);

копирует ровно 8 символов. И у вас просто не остается места для завершающего нулевого символа (да вы для него и места не выделяете в char time[8];.

Вы понимаете, что для строки "Hello" нужен не char s[5], а char s[6]? Потому что строка как массив char обязана заканчиваться нулевым символом. Вот оно и выводит - скопированные вами символы, а дальше из памяти за этим массивом мусор, пока не встретит нулевой символ...

→ Ссылка