Не правильно копируется строка
Я пишу функцию которая должна спарсить страничку и вернуть дату и время в виде строки.Страница нормально парсится,находится вхождение строки с датой,записываю в 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 шт):
Потому что
strncpy(time, time1, 8);
копирует ровно 8 символов. И у вас просто не остается места для завершающего нулевого символа (да вы для него и места не выделяете в char time[8];.
Вы понимаете, что для строки "Hello" нужен не char s[5], а char s[6]? Потому что строка как массив char обязана заканчиваться нулевым символом. Вот оно и выводит - скопированные вами символы, а дальше из памяти за этим массивом мусор, пока не встретит нулевой символ...