im_noob, Евгений Шатунов писал, что надо вывод строки делать внутри самой функции InputSymbol, до вызова free, а не в main, т.к. там память, занимаемая строкой, уже освобождена.
Ну и кроме того в main нету Stri писал об этом выше, а s у вас не модифицируется, так что выводит правильно. Выводить надо там где модифицированная строка еще существует!
Sergei Nazarenko, Работать с двумя разделами винда вполне может. Только она монтирует по умолчанию только первый раздел из MBR. Иногда этим пользуются - делают "скрытые" разделы. В BOOTICE для этого даже помнится была специальная кнопка - она просто меняет местами разделы в MBR, данные при этом не теряются.
Вам никто не мешает назначить букву диска на раздел вручную в менеджере дисков или в diskpart.
im_noob, Возьми несколько строк разной длины (четной и нечетной).
Напиши на бумаге. Потом напиши уже модифицированные строки с добавлением символов. Посчитай количество символов в модифицированной строке. Выведи формулу для вычисления длины модифицированной строки.
Именно такой длины и выделяй память для модифицированной строки. Не забудь добавить еще один символ под завершающий ноль.
Ну дык в mainе и нет никакого Stri, там есть s.
Где puts? И почему puts(InputSymbol)?
В какой переменной указатель на сформированную строку в функции InputSymbol? Вот ее и выводи.
im_noob, Лишняя закрывающая скобка. Если читать сообщения об ошибках компилятора будет быстрее, чем писать на тостер и ждать ответа :-)
А где вывод строки собственно?
im_noob, r[j] = '\0';
После цикла поставь. Это добавляет нулевой символ и означает конец строки. Без нулевого символа строка будет "бесконечной", точнее пока где-то дальше в памяти не встретится другой нулевой символ (отсюда и мусор в выводе) или пока программа не вылетит из-за обращения к недоступной памяти (этого не случилось в этот раз - повезло).
Вам и не нужна вся программа. Функция Sort() из примера - это и есть реализация сортировки методом пузырька. Только в таком варианте она рассчитана на сортировку массива double, а вам нужно сортировать charы. Просто замените double на char по всей функции и используйте ее, вместо вашей sort_string().
im_noob, В пузырьке вам не нужен второй массив, вы сортируете данные в этом же.
Просто берите код препода, только double замените на char. В его функции Sort() data - это указатель на сортируемый массив, а n - размер массива (у вас это будет strlen(word)).
im_noob, Ваш вариант сортировки он, конечно, рабочий, но сильно далек от оптимального. Пузырек, то же нельзя назвать оптимальным, но уже лучше, хотя бы тем, что не требует дополнительной памяти.
На счет обработки ошибок - функция malloc может вернуть вам нулевой указатель, в этом случае ваша программа вылетит по SIGFAULTу - обращение к не выделенной памяти, когда начнет писать по нулевому указателю. Обработка простая - обычно достаточно проверить указатель на равенство NULL после вызова malloc. Если указатель NULL - напечатать ошибку и корректно завершить программу.
Но если переделать сортировку на пузырек, эта ошибка уйдет, т.к. не будет вызова malloc.
Вообще обычно любая системная (или библиотечная) функция может завершиться не удачно. Обработку ошибок необходимо делать.
im_noob, В его примере - сортировка пузырьком. Может он намекает, что надо вот так сортировать. Ну и сортируйте как он хочет. К тому же это будет сортировка на месте, без дополнительной памяти. И работать она будет быстрее, чем ваш вариант.
Но не понятно при чем тут puts.
Как уже писали в ответах - сама структура в норме.
Крашится не структура, а код, который ее использует. Вот его и надо смотреть.
Запусти программу под отладчиком без точек останова, в момент сбоя отладчик перехватит управление и покажет участок кода, в котором произошла ошибка. Участок кода может быть не твой, а библиотечный или системный вызов, надо подняться по стеку вызовов до последнего твоего кода. Тут будет видно где произошла ошибка в твоем коде, тут же можно будет посмотреть значения переменных на момент падения и т.п. Возможно и решение сразу же найдется, но не факт, конечно.
Обычно ВПН серверу достаточно одного внешнего адреса. Но, конечно, задачи могут быть разные.
Зачем вам максимальное количество? Максимальное количество это сколько?
И еще дополню - никто не гарантирует, что в общеизвестных алгоритмах нет backdoor у тех же спец.служб.
Хотя, конечно, открытость алгоритма способствует тому, что бы его анализировали толпы криптоаналитиков, но и backdoorы в этом случае не лежат на поверхности и их совсем не просто найти.
Может быть. С теми АЦП, что я имел дело я получал коэффициенты вызовом библиотечной функции (библиотека для работы с АЦП, предоставляется производителем железки). Куда реально лезет функция за коэффициентами я не проверял. Хотя в одном случае библиотека была с открытыми исходниками, так что возможность проверить была.
Данные в файле бинарной матрицы заменятся не могут, т.к. не в функции Verbose_b() не в Verbose() нет операций записи в файл. Содержимое файла вы можете проверить вне программы, вставив в нужных местах программы паузы, а вне программы посчитав контрольные суммы файла.
Из подозрительного:
1. В Verbose_b() нет нужды после каждого чтения делать fseek(), т.к. fread сам передвигает указатель на прочитанное количество байт. Сейчас же у вас получается, что fread передвинул указатель, а потом вы его еще fseekом передвинули. Если у вас при этом вывод правильный, то какова структура файла? Получается, кроме самих значений data вы туда еще что-то пишете. Что?
2. В Verbose() похоже что тут у вас в нескольких местах возможно обращение по нулевому указателю. Условие циклов не корректно: условие нужно делать как while(m1 != NULL), внутри цикла сразу выводите текущий элемент, затем подцикл по right с таким же условием (смотрите, чтоб текущий элемент не выводился дважды), после подцикла переключаетесь на следующий down элемент.