такой вопрос:
Программа должна считывать файл и записывать его задом наперед.
Вроде бы, все ок, но появляется неинициализированная память и из-за этого последний элемент не записывается, а первый заполнен мусором вот сам код
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
int L = 0;
setlocale(LC_ALL, "ru");
string path = "file.txt";
ifstream fin;
fin.open(path);
if (!fin.is_open())
{
cout << "ошибка" << endl;
}
else
{
cout << "файл открылся" << endl;
int i = 0;
int k = 0;
int j = 0;
char arr;
char ch[1248];
while (fin.get(arr))
{
ch[i] = arr;
i++;
cout << arr;
}
cout << endl << " Длинна массива " << i <<endl;
for (j = 0; j <= i / 2; j++) {
int t = ch[i - j];
ch[i - j] = ch[j];
ch[j] = t;
}
for (j = 0; j < i; j++) {
cout << ch[j];
}
/* for (k = 0; k < i; k++) {
cout << ch[k];
} */
}
fin.close();
return 0;
}
Во-первых, вы считываете данные из файла и записываете их в массив не заботясь о выходе за пределы массива. Во-вторых, зачем вы переварачиваете массив? Вам же нужно просто записать его в обратном порядке.
Хочу предложить, как мне кажется, более красивое решение (за исключением того, что оно не подойдет для огромных файлов, так как я, как и вы в вашем коде, считываю данные полностью):
// main.cpp
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <iterator>
int main(int argc, char *argv[]) {
if (argc != 3) {
std::cerr << "you must set input and output filenames" << std::endl;
return EXIT_FAILURE;
}
std::string input = argv[1];
std::string output = argv[2];
std::ifstream fin{input, std::ios_base::in};
if (!fin.is_open()) {
std::cerr << "file cant not be opened" << std::endl;
return EXIT_FAILURE;
}
std::string str{std::istreambuf_iterator<char>{fin},
std::istreambuf_iterator<char>{}};
std::ofstream fout{output, std::ios_base::out};
if (!fout.is_open()) {
std::cerr << "can not open out file" << std::endl;
return EXIT_FAILURE;
}
std::copy(str.rbegin(), str.rend(), std::ostreambuf_iterator<char>{fout});
return EXIT_SUCCESS;
}
ch[i - 1 - j] должно быть. Поэтому первый элемент не инициализируется - инициализируется последний плюс один элемент. У вас сдвиг вправо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно считать N-ное кол-во символов из файлаВопрос стоит в чем: Как узнать длинну строки в файле (когда слова разделены пробелом, то считывается...
Программа должна убирать лишние пробелы, посмотрел в отладчике, программа работает вроде норм, но потом где-то ломается и выдает ошибку, если...
Решил разобраться в трассировке лучейДля начала думаю все это дело реализовать чисто на процессоре, то есть при помощи обычного C++ кода, а затем...
После определенного количества посланных пакетов (отправляю части файла размером по 128 байт) этот код перестает принимать пакеты от клиентаКак...