fgets(text, 80, infile);
fgets()
- это функция библиотеки C, которая ожидаетchar *
в качестве своего первого параметра. Он абсолютно ничего не знает ни о каком классе C ++, и не только оstd::string
, который вы передаете в качестве первого параметра. Такжеfgets()
не имеет никакого представления о классе C ++std::ifstream
, который вы пытаетесь передать ему в качестве третьего параметра. И это именно то, что говорится в сообщении об ошибке вашего компилятора.Вы случайно смешиваете код на C и C ++, что приводит к повторяющейся путанице.
char inputfilename[80], outputfilename[80];
Здесь вы также должны использовать
std::string
вместо массивов в стиле C произвольного размера.while (infile.eof()==0) {
Это всегда ошибка , и прочтите эту связанную статью для получения дополнительной информации.
fprintf(outfile,"%d. %s\n", text);
Опять же:
fprintf
также является библиотечной функцией C, которая абсолютно ничего не знает о классах C ++, таких какstd::string
иstd::ofstream
. В любом случае это ошибка, потому что эта строка имеет заполнители для двух параметров: целое число,%d
и строка в стиле C,%s
; и вы даете здесь только один параметр,text
. Если бы вы писали C вместо кода C ++, это тоже не сработало бы, но это в основном академично. Это программа на C ++, и эта функция библиотеки C не имеет никакого отношения к делу, во-первых, здесь.Когда вы читаете из
std::ifstream
:
Вы можете использовать std::getline
, чтобы прочитать всю строку текста в std::string
В качестве альтернативы вы можете использовать отформатированный оператор извлечения >>
Или вы можете использовать различные методы объекта std::ifstream
для чтения из файла и в подходящий буфер
Эти альтернативы не эквивалентны (иначе какой смысл?), И они делают разные вещи, и правильность выбора зависит от требований.
Аналогично, для записи в std::ofstream
вы можете использовать:
Оператор форматированного вывода <<
.
Различные методы самого объекта std::ofstream
.
И в некоторых сложных ситуациях вы можете воспользоваться библиотекой итераторов, а также реализовать чтение и запись, используя итераторы ввода и вывода.
Правильный подход зависит от конкретной ситуации. Для получения дополнительной информации о том, как читать и писать из файлов в C ++ с использованием этих подходов, см. Любую хорошую книгу по C ++ . Какую бы книгу C ++ на самом деле ни советовали вам использовать fgets()
для чтения из std::ifstream
и в std::string
: выбросьте ее и получите лучшую книгу из списка, указанного выше. Если это именно то, что вы нашли в какой-то программе в Интернете - вы не можете выучить C ++ таким образом, собрав воедино разные части разных программ, и надеясь, что результаты сработают. Чтобы исправить все ваши ошибки компиляции: удалите весь тот код C, который абсолютно ничего не знает о C ++, и замените его на надлежащий код C ++, используя любой из вариантов, которые я обрисовал в общих чертах выше, используя примеры из книг C ++, связанных выше, в качестве ссылки .
Это не было протестировано, но я думаю, что это должно работать с помощью mod_rewrite
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
Следует иметь в виду, что механизм Перезаписи только умирает, как только Запрос HTTP был получен - что означает, что Вам все еще был бы нужен сертификат для клиента для установки соединения для отправления запроса!
Однако, если резервная машина, будет казаться, будет иметь то же имя узла (насколько клиент заинтересован), тогда не должно быть никакой причины, Вы не можете использовать тот же сертификат в качестве основной производственной машины.