Форум программистов, компьютерный форум, киберфорум
Наши страницы
C (Си)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
free-lance
11 / 11 / 1
Регистрация: 19.02.2017
Сообщений: 26
1

Указатель void в функцию

02.03.2017, 23:23. Просмотров 1370. Ответов 38
Метки нет (Все метки)

Уважаемые форумчане подскажите такой вопрос, имеется некая функция на вход надо передать указатель void *pBuf,
сама функция
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
hcSqlReadResults(
  hcHSTMT   h,      /* Оператор с результатами */
  hcRECNO   gStart,     /* С какой записи начинаем читать */
  void      *pBuf,      /* Адрес буфера для результатов */
  unsigned  wBufSize,   /* Размер буфера этого буфера */
  unsigned  *cnt)       /* Сколько прочитали */
1
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2017, 23:23
Ответы с готовыми решениями:

Структуры и указатель на void
Помогите разобраться, возможно ли организовать следующий алгоритм. Стоит задача передавать данные...

Void указатель в функции с переменным числом параметров
Добрый вечер. Суть задачи: посчитать значение выражения (x1+x3+x5+...) / (x2+x4+x6). Количество...

Указатель типа void: зачем они нужны?
Здравствуйте! Начал изучать Язык С, в книжке написано: Только не понятно зачем нужны такие...

Указатель типа void - пояснить несколько строк кода
Ну вот вроде разобрался с указателями и начал разбираться с указателями типа void и сразу же...

Реализовать аналог `void *memmove(void *to, void *from, size_t n)`
Добрый день, подскажите пожалуйста, как реализовать такой метод самостоятельно? который копирует...

38
nimazzzy
Заблокирован
02.03.2017, 23:43 2
А где вопрос?
2
free-lance
11 / 11 / 1
Регистрация: 19.02.2017
Сообщений: 26
02.03.2017, 23:56  [ТС] 3
Извиняюсь дописываю

Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
  int          h ;             /* Оператор с результатами */
  long  gStart ;        /* С какой записи начинаем читать */
  void      *pBuf ;     /* Адрес буфера для результатов */
  unsigned  wBufSize ;  /* Размер буфера этого буфера */
  unsigned  *cnt  ;     /* Сколько прочитали */
 
int  hcSqlReadResults(     h,   gStart,    pBuf,    wBufSize,  cnt    )  ;


правильно ли объявлены переменные чтобы эта ф-ия отработала правильно
и как вывести void *pBuf на экран
0
nimazzzy
Заблокирован
03.03.2017, 00:04 4
Я надеюсь, что память ты выделил для указателей.
Цитата Сообщение от free-lance Посмотреть сообщение
и как вывести void *pBuf на экран
Вопрос хороший, конечно, но. Что там за данные? Нельзя просто так вывести "что-то неизвестного типа". Чтобы что-то вывести, надо знать, что. Сам pBuf - это просто указатель на память.
2
free-lance
11 / 11 / 1
Регистрация: 19.02.2017
Сообщений: 26
03.03.2017, 00:15  [ТС] 5
Параметры:
Кликните здесь для просмотра всего текста
ТипАргументЗначение
inthИдентификатор оператора, содержащего результаты поиска оператором select.
longgStartНомер записи в результате, начиная с которой пересылаются результаты. Все найденные записи нумеруются с 0.
void *pBufАдрес буфера для присылаемых записей.
unsignedwBufSizeРазмер буфера для результатов. В буфер помещается целое количество записей. Если запись не может войти в буфер целиком, она не присылается.
unsigned *cntАдрес, куда функция запишет количество байтов данных, помещённых в буфер пользователя. Если это количество разделить на длину записи, то получим количество считанных записей. Неполные записи не присылаются.


Добавлено через 1 минуту
ОК понял , там байты которые надо в строку и эту строку вывести на экран

Добавлено через 2 минуты
извиняюсь вставка не получилась сейчас исправлю

Добавлено через 3 минуты
вот исправил описание
0
nimazzzy
Заблокирован
03.03.2017, 01:06 6
C
1
puts((char*)pBuf);
Но это сработает только в случае, если pBuf указывает на строку, в конце которой нулевой символ. Но так как у тебя там записи какие-то и их длины, то все может быть сложнее.
1
fssf11
14 / 14 / 1
Регистрация: 27.02.2017
Сообщений: 165
03.03.2017, 02:28 7
Вываливает ошибку , а как байты преобразовать в массив символов
0
nimazzzy
Заблокирован
03.03.2017, 02:32 8
Цитата Сообщение от fssf11 Посмотреть сообщение
а как байты преобразовать в массив символов
Байты и есть массив символов. Вопрос не в преобразовании, а в интерпретации.
1
fssf11
14 / 14 / 1
Регистрация: 27.02.2017
Сообщений: 165
03.03.2017, 02:32 9
типа вот такого
C++
1
2
for ( int i = 0; i < sizeof(*pBuf); i++)
       printf("%d", pBuf[i]);
тут ошибка вернее как бы пример только не пойму как подогнать под этот пример
0
nimazzzy
Заблокирован
03.03.2017, 02:35 10
Цитата Сообщение от fssf11 Посмотреть сообщение
sizeof(*pBuf)
Это полный ппц. Выкидывай этот код, даже комментировать не буду.

Добавлено через 10 секунд
Цитата Сообщение от fssf11 Посмотреть сообщение
printf("%d
А числа-то тут при чем?
1
fssf11
14 / 14 / 1
Регистрация: 27.02.2017
Сообщений: 165
03.03.2017, 02:35 11
"int printf(const char *const ,...)": невозможно преобразовать аргумент 2 из "void" в "..."
0
nimazzzy
Заблокирован
03.03.2017, 02:35 12
Цитата Сообщение от fssf11 Посмотреть сообщение
Вываливает ошибку
Какую конкретно и на какой строке конкретно. Может ты и память не выделил, кто тебя знает.
1
fssf11
14 / 14 / 1
Регистрация: 27.02.2017
Сообщений: 165
03.03.2017, 02:36 13
Пардон скопировал , в проекте уже исправил а сюда так и втюхал
0
nimazzzy
Заблокирован
03.03.2017, 02:37 14
Цитата Сообщение от fssf11 Посмотреть сообщение
невозможно преобразовать аргумент 2 из "void" в "..."
Ну так еще бы. Я сказал: код на свалку. Он левый и неправильный.

Добавлено через 50 секунд
Как вывести строку я показал. Код правильный. Ошибку ищи у себя. Либо строка не заканчивается нулем, либо память не выделена.
1
fssf11
14 / 14 / 1
Регистрация: 27.02.2017
Сообщений: 165
03.03.2017, 02:38 15
тут ошибка выдает , как то надо указатель превратить в массив
0
nimazzzy
Заблокирован
03.03.2017, 02:41 16
Цитата Сообщение от fssf11 Посмотреть сообщение
как то надо указатель превратить в массив
Мне кажется, ты не понимаешь, что такое указатель, что такое массив и так далее. Указатель в массив превратить невозможно, потому что он является просто числом- адресом. И просто указывает на область памяти. Начни с основ. Когда разберешься с основами, вернись к своей функции.

Добавлено через 13 секунд
Цитата Сообщение от fssf11 Посмотреть сообщение
тут ошибка выдает
Где тут-то?
1
fssf11
14 / 14 / 1
Регистрация: 27.02.2017
Сообщений: 165
03.03.2017, 02:46 17
ОК , понял , вот так
C++
1
2
for (int i = 0; i < sizeof(pBuf); i++)
     printf("%с", pBuf);
выдает вот такой результат (в консоли)
Ф-я hcSqlReadResults= -64сссс
0
nimazzzy
Заблокирован
03.03.2017, 02:48 18
Цитата Сообщение от fssf11 Посмотреть сообщение
sizeof(pBuf)
Это неправильно. Размер, блин, указателя. Так невозможно получить длину строки.

Добавлено через 1 минуту
И вывод
Цитата Сообщение от fssf11 Посмотреть сообщение
"%с", pBuf

кошмар. Вывод тоже неправильный.
1
fssf11
14 / 14 / 1
Регистрация: 27.02.2017
Сообщений: 165
03.03.2017, 02:51 19
меняю у printf cпецификаторы формата , при %s выдает Ф-я hcSqlReadResults= -64(null)(null)(null)(null)
0
nimazzzy
Заблокирован
03.03.2017, 02:53 20
Цитата Сообщение от fssf11 Посмотреть сообщение
меняю у printf cпецификаторы формата , при %s выдает Ф-я hcSqlReadResults= -64(null)(null)(null)(null)
Слушай, я тебе написал как вывести строку много сообщений назад. И написал, в чем у тебя может быть проблема. Чего ты мучаешься с изначально неверным кодом?
1
03.03.2017, 02:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2017, 02:53

Передать в функцию указатель на указатель
Добрый день, В main я создаю указатель на строку, память для которой хочу выделить внутри другой...

Передача переменной в функцию void
Вопрос такой, получаю значение переменной w, например w, будет равно 1. Это значение нужно передать...

Написать функцию поиска максимального элемента для массива типа void
#include &lt;stdio.h&gt; #include&lt;conio.h&gt; #include &lt;stdlib.h&gt; unsigned int fmax( int*a, unsigned...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru