Чтение файла и отправка по tcp

183
02 июля 2022, 19:40
string path = "flag.txt";
ifstream fin;
fin.open(path);
if (!fin.is_open())
{
    std::cout << "errr" << std::endl;
}
else
{
    std::string str;
    while (!fin.eof())
    {
        getline(fin, str);
        char* c = &str[0];
        send(Connection, c, sizeof(c), 0);
        cout << c << endl;
    }
}
fin.close();

Идея какая, я открываю файл и считываю его построчно, каждую строку я конвертирую в char вывожу на экран и отправляю при помощи send() на tcp сервер. Файл открылся строка вывелась на экран корректно но на сервер приходят не корректные данные. Почему так происходит? к примеру я открыл файл в котором 2 строки

0KTQu9Cw0LMK0KLQtdGB0YI=
0YHQvtC+0LHRidC10L3QuNC1IDI=

пришло:

0KTQu9Cw0YHQvtC+YHQvtC+
Answer 1

Начнем c того, что

sizeof(c) == sizeof(char*)

равно не то 4, не то 8 байт - размер указателя в вашей программе.

У вас есть и другие погрешности - например,

while(!fin.eof()){
    getline(fin,str);
    ...

Почему это работает не так, как вам кажется - см. здесь.

Ваш способ с char *c = &str[0]; должен отработать (если передать верную длину), но лично мне куда больше нравится использовать стандартные вещи -

send(Connection, s.c_str(), s.size(), 0);
READ ALSO
IPS Forum, Регистрация не в стандартную базу

IPS Forum, Регистрация не в стандартную базу

В стандарте при регистрации пользователя записывает логин пасс в MySql базу а пароль еще и шифрует, нужно сделать регистрацию в отдельную MySql базу,...

210
как реализовать оповещение клиентов об окончании оплаченного периода ? на php. Вывод в телеграм бот

как реализовать оповещение клиентов об окончании оплаченного периода ? на php. Вывод в телеграм бот

не приходит в голову данная реализация, мне надо оповестить за день клиента что у него заканивается оплачиваемый период(на неделю, две недели

187
Как вытянуть из строки только цифры?

Как вытянуть из строки только цифры?

Есть строки вида 'abc 72', 'cdi 8', 'bagi 993' и тд

183