Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».
Закрыт 10 месяцев назад.
Есть ОДНОПОТОЧНАЯ программа.
В ней есть функция
// Отправка даты последнего сообщения
void SendLastDate(char login[257], void *arg, void * responsSocket) {
struct MyMessen *mes = (struct MyMessen *) arg;
struct WordAnswer *tansw = (struct WordAnswer *)malloc(sizeof(struct WordAnswer));
char TellsAdress[2048];
unsigned long long int date = 0;
FILE * TellsFile;
std::ofstream File;
// Получение адресса и создание недостающих файлов
sprintf_s(TellsAdress, "%s%c%s%c%s", DBMesAdress, '/', login, '/', mes->pass);
std::filesystem::create_directories(TellsAdress);
sprintf_s(TellsAdress, "%s%s", TellsAdress, "/info.cat");
if (!std::filesystem::exists(TellsAdress)) {
File.open(TellsAdress);
File.close();
}
// Открытие файла
if (fopen_s(&TellsFile, TellsAdress, "r") != 0) {
printf_s(" FileSystem ERROR!\n");
mes->Answer = -2;
SendPac(mes, responsSocket, false);
return;
}
// Считывание даты
if (!(fscanf_s(TellsFile, "%llu", &date) > 0)) {
printf_s(" FileSystem ERROR!\n");
mes->Answer = -3;
SendPac(mes, responsSocket, false);
return;
} else
if (mes->Answer == 1) {
mes->Answer = 0;
sprintf_s(mes->pass, "%llu", date);
SendPac(mes, responsSocket, false);
} else
if (mes->Answer == 2) { // Если нужно получить кол-во сообщений
if (!(fscanf_s(TellsFile, "%llu", &date) > 0)) {
printf_s(" FileSystem ERROR!\n");
mes->Answer = -3;
SendPac(mes, responsSocket, false);
return;
} else {
mes->Answer = (int)date;
SendPac(mes, responsSocket, false);
}
}
// Освобождение памяти
fclose(TellsFile);
}
Почему-то после выполнения:
std::filesystem::create_directories(TellsAdress);
Обнуляется mes;
Вот такое
sprintf_s(TellsAdress, "%s%s", TellsAdress, "/info.cat");
не допускается.
Нельзя использовать один и тот же буфер и как буфер-получатель, и как одну из входных строк в sprintf[_s]
Продвижение своими сайтами как стратегия роста и независимости