1
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+
Harry
  • 221,325
qweqwe
  • 41
  • 2
  • send возвращает кол-во реально отправленных байт. Вам нужно проверять это число и делать доотправку, если что. – KoVadim Nov 25 '20 at 11:03

1 Answers1

3

Начнем 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);
Harry
  • 221,325