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+
Начнем 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);
В стандарте при регистрации пользователя записывает логин пасс в MySql базу а пароль еще и шифрует, нужно сделать регистрацию в отдельную MySql базу,...
не приходит в голову данная реализация, мне надо оповестить за день клиента что у него заканивается оплачиваемый период(на неделю, две недели