Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40

При работе с указателями на сервер отправляется мусор, но выводит в консоль норм данные

09.01.2017, 18:40. Показов 2894. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый!
Отправляю на сервер разные штуки и на снифер это ловлю, вот что получается:
C++
1
char buf[] = "AAABBB";
на снифере AAABBB - верно

C++
1
char* buf = "AAABBB";
на снифере ..@... - неверно

C++
1
2
3
4
5
6
7
8
char* buf = new char[10];
    buf[0] = 'A';
    buf[1] = 'A';
    buf[2] = 'A';
    buf[3] = 'B';
    buf[4] = 'B';
    buf[5] = 'B';
    buf[6] = 0;
на снифере - мусор
Есть идеи/ответы почему так происходит?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2017, 18:40
Ответы с готовыми решениями:

Tcp ip клиент-сервер C++ сервер выводит мусор
server # include <sys/types.h> # include <iostream> # include <winsock2.h> # include <stdlib.h> # pragma comment (lib,...

При выводе массива, выводит мусор
Програмка генератор паролей! #include<iostream> #include<time.h> #include<conio.h> using namespace std; void...

Ошибка при работе с указателями
Дан вот такой кусок кода: #include <stdio.h> int main() { char mas; scanf("%s",mas); char **pos; ...

26
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
10.01.2017, 09:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
разобраться в разнице между массивами и указателями.
А в чем разница?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.01.2017, 10:22
Цитата Сообщение от Nishen Посмотреть сообщение
А в чем разница?
В типах разница.
Тип "массив" приводится к типу "указатель" неявно. Но это не означает, что у этих типов одинаковые свойства.
Лакмусовая бумажка для проверки понимания этой темы: если человек сможет объяснить почему массив int a[2][2]; не может быть приведен к int **, значит он понимает в чем эти свойства заключаются.

Кликните здесь для просмотра всего текста
2
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
10.01.2017, 11:21
Цитата Сообщение от DrOffset Посмотреть сообщение
значит он понимает в чем эти свойства заключаются.
Значит это я. Пойду разбираться. Спасибо за ссылку.

Добавлено через 54 минуты
Как оказалось, для меня эта тема вообще темный лес. Мне даже не понятен синтаксис

C++
1
int (*x)[5];
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
10.01.2017, 14:09
Цитата Сообщение от DrOffset Посмотреть сообщение
Не, там это будет компилироваться, потому что posix вариант send принимает void *, а не char *.
Но это нисколько не изменяет положения вещей, насчет того, что отправлялось значение указателя.
Понятно, этого не знал.
Цитата Сообщение от DrOffset Посмотреть сообщение
Если все еще непонятно о чем мы с nd2 говорим, то наверное стоит еще раз перечитать учебник про указатели и массивы.
Скорее всего, это я не правильно понимаю, как работает именно функция send(), надо с ней разобраться. Shakior правильно мне писал, что здесь есть две передачи (отправления): в функцию и на сервер.
Цитата Сообщение от Shakior Посмотреть сообщение
Он говорил не про отправлял в функцию, а про отправлял на сервер
А я говорил о функции, которая просто принимает указатель на char. Для уточнения:
C++
1
2
3
4
5
6
void f(void* str)
{}
//...
char* buf = "asdf";
f(buf); // передаётся значение указателя buf
f(&buf); // передаётся адрес уазателя buf
Коментарии правильны?
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.01.2017, 14:43
Цитата Сообщение от nd2 Посмотреть сообщение
Скорее всего, это я не правильно понимаю, как работает именно функция send(), надо с ней разобраться. Shakior правильно мне писал, что здесь есть две передачи (отправления): в функцию и на сервер.
Заменим send на memcpy - суть не поменяется.
В функцию передается адрес того, что нужно отправить (скопировать).

Т.е. если мы передали в функцию адрес указателя, то отправлено будет его значение, т.е. адрес, который в указателе содержится. Я об этом сразу и написал.
А чтобы отправить то, на что указатель указывает, то его и надо сразу передавать, без всяких взятий адреса.

Цитата Сообщение от nd2 Посмотреть сообщение
Коментарии правильны?
Да.

Добавлено через 5 минут
Причем отправлен будет адрес указателя + какой-то мусор со стека потому, что strlen-то был вызван для правильного указателя (см #3), честно посчитал длину, например 6. Если платформа 32-битная, то адрес занимает 4 байта, и это на 2 байта меньше, чем мы указали в send (strlen вернул 6). Значит будет захвачено еще два байта за пределамами указателя, которые и будут являться тем самым мусором, который наблюдал ТС.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
10.01.2017, 16:21
Цитата Сообщение от DrOffset Посмотреть сообщение
Причем отправлен будет адрес указателя + какой-то мусор со стека потому, что strlen-то был вызван для правильного указателя (см #3), честно посчитал длину, например 6. Если платформа 32-битная, то адрес занимает 4 байта, и это на 2 байта меньше, чем мы указали в send (strlen вернул 6). Значит будет захвачено еще два байта за пределамами указателя, которые и будут являться тем самым мусором, который наблюдал ТС.
Об этом и я писал в 6 посте.
Цитата Сообщение от DrOffset Посмотреть сообщение
Я об этом сразу и написал.
Ты-то написал:
Цитата Сообщение от DrOffset Посмотреть сообщение
Отправлялось, внезапно, значение указателя
, да я, почему-то (?), это понял, как отправление в функцию:
Цитата Сообщение от nd2 Посмотреть сообщение
Разве значение указателя, а не адрес самого уазателя?
C++
1
&buf
На что мне ТС (поняв мою ошибку) справедливо и заметил:
Цитата Сообщение от Shakior Посмотреть сообщение
Он говорил не про отправлял в функцию, а про отправлял на сервер
А вот здесь я уже откровенную чушь написал, за что приношу глубокие извинения:
Цитата Сообщение от nd2 Посмотреть сообщение
Что в функцию, то и на сервер. Разве может быть по другому?
Как раз таки, в функцию адрес, а на сервер данные по этому адресу.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.01.2017, 17:10
Цитата Сообщение от nd2 Посмотреть сообщение
да я, почему-то (?), это понял, как отправление в функцию
В итоге все примерно говорили об одном и том же, но разными словами
Но да, я тогда писал об отправке на сервер, потому что отвечал на вопрос в контексте поста ТС, который о ней и говорил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2017, 17:10

Выводит мусор при отображении цифр по указателю
Здравствуйте, нужно срочно помочь, ввожу программу а вместе цифр выдает "мусор", как исправить правильно программу? #include...

При добавлении студента, сбивается вся структура, и при выводе всего списка студентов, выводит какой то мусор
Суть действий: При добавлении студента, сбивается вся структура, и при выводе всего списка студентов, выводит какой то мусор. Раньше я...

Что не так при работе с указателями?
Здравствуйте! Начинаю изучать работу с указателями. #include <iostream> using namespace std; int fun(int a, int b, long...

Как избавиться от * и . при работе с указателями?
Сразу приведу пример: #include <stdio.h> struct struct5 { int* value; }; struct struct4 { struct5* s5; };

В консоль выводит данные ошибки
Скажите пожалуйста, о чем эти ошибки говорят и как решить проблему с их появлением? 1) CommandInvokationFailure: Unable to list...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru