Петр: я понял, но не могу придумать как эффективно закрыть этот баг. Перераспределением буффера после конкатенации символа? И вопрос: почему всё-таки выделенный после вызова оператора '+=' буффер, не сохраняется (ведь это метод, который неявно получает указатель на объект, и выполняет всё напрямую)?
Петр: но ведь второй параметр, принимаемый функцией strcpy_s,- размер буфера строки, в которую копируем. Если я в второй параметр передам 'strlen( this->path)', то получу ошибку "Buffer is too small".
Я добавил строку 'delete[] obj.path' после обьявления 'Path obj' в методах 'perator + (const char &ch)' и 'operator + (const Path&ch)'. Но ошибка так и осталась. Что именно не так в строке 'strcpy_s(obj.path, buff_size, this->path)'? Буфер слишком мал для конкатенации? Вроде всё отлично отрабатывал ...
1)вообще-то это была экзаменационная работа по процедурному программированию
2)MAX_SURNAME_SIZE, если не ошибаюсь, 32, а MAX_PASSWORD_SIZE - 64
3)мы ещё даже ООП не разбирали, какой XML, какой pugixml?
4)думаю, что секьюрность не так и важно программы не для продакшина, а для препода которому раз покажу и он забудет, да и лучше реализовать какую-то более важную функциональность, чем защиту, ибо на проэкт дали 2 дня
5)Хэш и соль не проходили
PS: зачем вообще здесь выделываться перед первокурсником? "Гавнокод" видите-ли. Боюсь представить ваш код в первых программах.
С Sharp: всё, нашёл ошибку. Я записывала в файл размер строки названия группы и саму строку (хотя размер для всех названий групп одинаков и его бессмысленно записывать). А считывал уже строку, зная размер.
Не могу выехать за границу потому, что выделяю 21 байт (#define MAX_FACULTY_SIZE 21
data[6] = new char[MAX_FACULTY_SIZE + 1];), а записываю 11 байт (str = "Programming";
size = strlen(str);
fwrite(&size, sizeof(size), 1, accounts_w);
fputs(str, accounts_w);)