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

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

09.01.2017, 18:40. Показов 2518. Ответов 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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
09.01.2017, 20:01
Цитата Сообщение от Shakior Посмотреть сообщение
почему так происходит?
Первое и главное: разобраться в разнице между массивами и указателями.
Второе: чтобы ответить на этот вопрос без телепатии, нужен код отправки

Минутка телепатии:

Энергетические потоки сообщают, что возможно данные оправляются как-то так:
C++
1
2
3
char * buf = .....
 
send(sock, (char *)&buf, sizeof(buf), 0);
Если духи не врут, то тут сразу несколько грубых ошибок, происходящих из непонимания разницы между массивами и указателями.
2
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40
09.01.2017, 20:19  [ТС]
Не знаю, как тему удалить, ошибка была в сенде ssize_t bytes_sent = send(sock, &buf, strlen(buf), 0);
Если адрес брался с указателя, то отправлялась ерунда.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
09.01.2017, 20:27
Цитата Сообщение от Shakior Посмотреть сообщение
Если адрес брался с указателя, то отправлялась ерунда.
Отправлялось, внезапно, значение указателя
0
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40
09.01.2017, 20:33  [ТС]
"Отправлялось, внезапно, значение указателя"
Отправлялось значение + какой-то мусор, тк strlen давал значения больше 4-х байт
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.01.2017, 22:47
Цитата Сообщение от DrOffset Посмотреть сообщение
Отправлялось, внезапно, значение указателя
Цитата Сообщение от Shakior Посмотреть сообщение
&buf
Разве значение указателя, а не адрес самого уазателя?

Добавлено через 12 минут
Цитата Сообщение от Shakior Посмотреть сообщение
тк strlen давал значения больше 4-х байт
Если это про strlen() здесь:
Цитата Сообщение от Shakior Посмотреть сообщение
C++
1
ssize_t bytes_sent = send(sock, &buf, strlen(buf), 0);
, то здесь strlen() правильно определяла длину Си-строки, адрес которой был в buf. Но передавлся не адрес Си-строки, а адрес самого указателя.
0
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40
09.01.2017, 23:15  [ТС]
"Разве значение указателя, а не адрес самого уазателя?"
Нет, именно, значение. Тк в сенд отправлялся адрес адреса, а сенд отправляет значение(адрес)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.01.2017, 23:22
Цитата Сообщение от Shakior Посмотреть сообщение
Нет, именно, значение. Тк в сенд отправлялся адрес адреса, а сенд отправляет значение(адрес)
Значение указателя - это адрес который в нём содержится.
Если так:
Цитата Сообщение от DrOffset Посмотреть сообщение
C++
1
2
char * buf = ..... 
send(sock, (char *)&buf, sizeof(buf), 0);
, то отправляется не значение указателя (адрес, который в нём содержится), а адрес указателя, о чём я и написал.
0
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40
09.01.2017, 23:25  [ТС]
Нет, параметр указатель, но в начале я отправлял указатель на указатель, а в чем разница? Я ее не вижу) Оба 4 байта значения, оба указывают на что-то в памяти
"то отправляется не значение указателя (адрес, который в нём содержится), а адрес указателя, о чём я и написал." - это да, а в сенде из адреса указателя уже берется его значение) О чем мы писали)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.01.2017, 23:31
Цитата Сообщение от Shakior Посмотреть сообщение
но в начале я отправлял указатель на указатель, а в чем разница?
Нет у тебя указателя на указатель. Отправлял ты адрес указателя, что не одно и то же.
Написал я о том, что DrOffset написал: что ты отправлял значение указателя, что неверно, т.к. значение указателя - это адрес, который в нём хранится, а ты отправлял адрес самого указателя, а не то, что в нём хранится (его значение). Если бы отправлял значение указателя, т.е. buf, то все было бы правильно.
0
0 / 0 / 1
Регистрация: 23.02.2016
Сообщений: 8
09.01.2017, 23:35
Доброй ночи)
Можно ли в Вижаке 13 работать с графикой? Ну банальные графики и построение блок-схем с помощью геом фигур. И если можно то скачивать нужно?
0
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40
09.01.2017, 23:36  [ТС]
Он говорил не про отправлял в функцию, а про отправлял на сервер
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.01.2017, 00:05
Цитата Сообщение от Shakior Посмотреть сообщение
Он говорил не про отправлял в функцию, а про отправлял на сервер
Что в фукнцию, то и на сервер. Разве может быть по другому?
Давай так: цитату я DrOffset привёл, у него и спросил. Твоё мнение я понял. Подождём DrOffset.

Добавлено через 1 минуту
Цитата Сообщение от Okeris Посмотреть сообщение
Доброй ночи)
Можно ли в Вижаке 13 работать с графикой? Ну банальные графики и построение блок-схем с помощью геом фигур. И если можно то скачивать нужно?
Okeris, ты прямо как снег на голову... Тему создай отдельную, тут совсем о другом беседа.

Добавлено через 21 минуту
Shakior, я вот что не мойму: как у тебя такой код компилировался?
Цитата Сообщение от Shakior Посмотреть сообщение
C++
1
char* buf = "AAABBB";
Цитата Сообщение от Shakior Посмотреть сообщение
C++
1
ssize_t bytes_sent = send(sock, &buf, strlen(buf), 0);
Именно так и писал вызов send()? Без приведения &buf к char* ?
Цитата Сообщение от DrOffset Посмотреть сообщение
Энергетические потоки сообщают, что возможно данные оправляются как-то так:
C++
1
2
char * buf = .....
send(sock, (char *)&buf, sizeof(buf), 0);
0
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40
10.01.2017, 00:40  [ТС]
А что не так с моим кодом?)
char* buf = "AAABBB"; - на это GCC дал предупреждение: "deprecated conversion from string constant to «char*» [-Wwrite-strings]", а в визуал студии и этого не было)
Писал без приведения. А что смущает, что передавал ей char**?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.01.2017, 00:50
Цитата Сообщение от Shakior Посмотреть сообщение
Писал без приведения. А что смущает, что передавал ей char**?
Смущает то, что у меня в студии, без приведения, не компилируется. DrOffset не даром же привёл код с приведением.
0
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40
10.01.2017, 00:52  [ТС]
В студии я проверял только это: char* buf = "AAABBB";
ssize_t bytes_sent = send(sock, &buf, strlen(buf), 0); - это в центосе компилировалось
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.01.2017, 00:57
Центос - это что?
0
1 / 1 / 1
Регистрация: 29.08.2015
Сообщений: 40
10.01.2017, 01:27  [ТС]
Это Red Hat только без поддержки, ОС такая, Linux короче.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.01.2017, 01:56
Цитата Сообщение от Shakior Посмотреть сообщение
Linux короче.
И в Linux такое не должно компилироваться.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
10.01.2017, 08:26
Цитата Сообщение от nd2 Посмотреть сообщение
И в Linux такое не должно компилироваться.
Не, там это будет компилироваться, потому что posix вариант send принимает void *, а не char *.
Но это нисколько не изменяет положения вещей, насчет того, что отправлялось значение указателя.

Цитата Сообщение от nd2 Посмотреть сообщение
Подождём DrOffset.
А что ждать-то?

Добавлено через 11 минут
Цитата Сообщение от Shakior Посмотреть сообщение
Он говорил не про отправлял в функцию, а про отправлял на сервер
В функцию send передается адрес того, что нужно отправить, и его размер.
Это значит, что по этому адресу будет прочитано значение и отправлено.
В случае с указателем передавался его адрес (адрес адреса), значит отправляемым значением будет значение указателя, т.е. адрес, который содержится в указателе. В случае с массивом - передавался указатель на массив, который численно равен адресу начала данных, поэтому с массивом - все работало.
Если все еще непонятно о чем мы с nd2 говорим, то наверное стоит еще раз перечитать учебник про указатели и массивы.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2017, 08:26
Помогаю со студенческими работами здесь

Выводит мусор при отображении цифр по указателю
Здравствуйте, нужно срочно помочь, ввожу программу а вместе цифр выдает "мусор", как исправить правильно программу? #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...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru