Двач помоги пожалуйста Нужно из строки сделать массив символов в С++; Мне нужно значение введенное пользователем передать в структуру сокета. есть строка ip, в нее записывается адрес сервера. нужно ее передать в структуру сокета, но функция inet_addr() работает только с массивом символов. Я попытался сделать это следующим образом, но ничего не получилось. помогите пожалуйста
ZeroMemory(&saddr_1, sizeof(saddr_1)); saddr_1.sin_family = AF_INET; saddr_1.sin_port = port_one; char* ip_char = new char[ip.size() + 1]; copy(ip.begin(), ip.end(), ip_char); ip_char[ip.size() + 1] = '\0'; cout << ip_char << "\n"; cout << ip.size(); saddr_1.sin_addr.s_addr = inet_addr(ip_char); //сюда нужно передать айпи delete[] ip_char; Вот код полностью https://pastebin.com/PKHxLCGn
>>260121191 там просто пользователь вводит, не определенное количество символов одной строкой, и надо из этой строки извлекать нужные, данные, а для этого нужны функции string.
>>260121751 А я понял, в чем проблема была, оказывается присвоение строки массиву char работает, тут проблема была в присвоении порта. Я думал можно не использовать функцию htons(), если используешь переменную. Но нет.
>>260123577 Я с помощью сокетов собрался передавать фаилы, как мне сделать так что бы не записывалось лишнее в фаил который я передаю по сети. Вот к примеру я передаю данные фаила my1.txt, массивом char размером 6 символов. У меня в конец фаила записываются лишние символы
>>260121027 (OP) >Нужно из строки сделать массив символов в С++; если речь про класс string, то можешь из него просто c_str() вызвать, вернет тебе указатель на массив символов
>>260121027 (OP) Если ты сам не смог нагуглить ответ даже на такой базовый вопрос, то это плохие новости касательно твоих перспектив в программировании. Самостоятельный поиск ответов и решений задач - это 90% работы.
>>260123652 Когда получаешь данные на стороне приёма у тебя данные пишутся в буфер. Очевидно, ты при записи записываешь больше чем в буфере было, т.е. либо мусор который получаешь выйдя за границы буфера, либо в самом буфере мусор. > fstream::in | fstream::out | fstream::app | fstream::binary fs.open(fstream::out | fstream::binary); char msg[6]; int bread = recv(s_1, msg, sizeof(msg), NULL); while (bread > 0) { fs.write(msg, bread); bread = recv(s_1, msg, sizeof(msg), NULL); }
>>260123902 Я на стороне сервера делаю вот так while (!fs.eof()) { char msg[6] = ""; fs.read(msg, 6); send(s_2, msg, sizeof(msg), NULL); cout << msg << "\n"; } Когда он считывает из фаила, но последние байты ничем не заполняет, надо как то придумать, что бы на стороне клиента не тронутые сервером байты не трогать
>>260124680 Ты хотел сказать на принимающей стороне? Я же тебе дал код выше >>260123902 >>260124684 >Ну и нахрена тогда нужны кресты? Чтобы иметь более абстрактные инструменты. >В ядре линупса и без этой залупы всё предельно понятно. Только многословно.
>>260124731 Сорта фломастеров, как по мне. Я лучше буду знать, что был kmalloc(sizeof(zalupa), flags) и что его где-то надо освободить, чем городить абстракции.
>>260124804 Ты просто не проникся абстракциями и метапрограммированием. Я как-то изучал OCaml после чего всерьёз хотел искать работу на нём настолько он казался охуенным когда я проникся.
>>260125048 Ну зачем сразу panic, можно аккуратный oops, и дальше gdb. А KASAN вообще сильно жизнь упрощает разве что не отсасывает, всякую неочевидную хрень ловит с готовым стектрейсом.
>>260125455 Больше вероятность наебнуться. Иногда даже оптимизации компилятора могут дать уязвимость в неожиданном месте. Была CVEшка, где GCC убрал проверку на null из-за того, что перед ней обратились к одному из полей структуры. Но, честно говоря, хз. Работает - значит работет. Пока. Всегда найдётся хитрый пидор, который вывернет это так, чтобы запустить левый код.