Блин, сколько тебе лет? Я к тому, что обычно молодняку свойственно засирать темы вида "Ой! Сделал", "А, не, вот так надо", "Ещё вот сдела", "О, ещё доделал".
Боюсь оказаться старпёром, но ты разрабатываешь херово. С таким-то подходом. Мне хочется наорать и поохаживать тебя плёткой. Сортирую пинки:
1. ДАВНО уже ВЕЗДЕ есть кеширование записи на диски и флешки. После вызова API записи в файл данные сначала сохраняются в оперативной памяти контроллера диска (а фунция говорит, что всё записала), а потом через некоторое время контроллером диска физически записываются на диск (Flush Buffers).
И только если специально вызывать через API функцию сброса буферов на диск (Flush) - то запишутся сразу, чего ты и боялся.
Мог бы сохранять всё в файл кусками по 1-2 кб, например. И не выносить людям мозги.
2. Ты прям совсем жжошь. Кринжово. В стиле того программиста, которого я ругал на работе за то, что он указатели на NULL не проверял. После этого он уволился и пошёл в школу преподавать детям информатику. Может, ты его ученик? NULL - это НИЧЕГО, а не символ с кодом 0.
Правильно записать надо было через MemSet (установка значений в области памяти в заданные)!
(Надо Жене Кислову вообще рассказать этот анекдот про ADR(NULL)... как такое вообще работало?! И как компилятор пропустил зарезервированное ключевое слово?!)
(Дополню: Ага, я потом увидел что ты, используя зарезервированное ключевое слово, объвяил массив из двух байт. Это ещё кринжовее: всё намешано в хламину, чтобы враг не понял)
3. Конечно, "всё работало само", раз ты объявил это как WSTRING. Потому что компилятор WSTRING инициализирует нулями. Был бы это какой-то соданный на лету буфер - там валялся бы мусор из байтов, и конец строки не проставился бы автоматически.
4. (Тут уже приходит Женя Кислов со второй плёткой и распечаткой книги про Отладку проектов на ПЛК) ГДЕ ПРОВЕРКА ГРАНИЦ ДАННЫХ?! Какие данные в памяти ПЛК перезапишет (затрёт) твоя функция, если я подсуну ей в первый параметр WSTRING(10), а во второй WSTRING(12000)? У тебя ж нет проверок, хватит ли длины буфера!
Не задумывался, почему в функциях работы с памятью надо указывать длину буфера-то? Это не просто так.
5. А StrLenW проверил? Какой максимальный диапазон длины строки она будет обрабатывать? Хватит её на WSTRING(15000)?
Всё это мне напоминает моего двоюродного брательника, тоже Сашо. Он сначала делает, потом думает, потом переделывает. Ужас!





Ответить с цитированием