Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Беда, указатели?.. 
V
    Опции темы
Acer
Дата 2.11.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Доброго времени суток.
Подскажите, что я не правильно сделал.
Вопрос в следующем:
есть метод:
Код

bool RODBC::getCellValue(int idx,void *value,long v_size,long *d_size,short cm){
    RETCODE rc;
    if ( cm == 1 ){
        SQLFetch( this->hstmt );
    }
    rc = SQLGetData( this->hstmt, idx, SQL_C_DEFAULT, value, v_size, d_size );
    return rc == SQL_SUCCESS;
}

Если я внутри этого метода вывожу в консоль value, то значение есть все время.
Если вызываю метод из вне, то значение есть через раз.
Вызываю так:
Код

for ( int j = 0; j < 4; j++ ){
    rdbc.execQuery( "SELECT atm FROM atm_data WHERE bank='2'" );
    char atm[10];
    long ds;
    rdbc.getCellValue( 1, atm, 10, &ds, 1 );
    std::cout << atm << std::endl;
}

Вот скриншоты, чтобы было понятнее...
Это, когда вывожу value внутри метода getCellValue
user posted image
Это когда не в нем
user posted image

Это сообщение отредактировал(а) Acer - 2.11.2008, 20:48
PM MAIL   Вверх
Acer
Дата 3.11.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Help please
PM MAIL   Вверх
J0ker
Дата 3.11.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



внутри функции эта переменная является указателем - и выводится она как указатель
снаружи она объявлена как массив символов и передается на вывод как char* - т.е. строка. Если первый байт массива ==0, то естественно это конец строки


--------------------
user posted image
PM MAIL   Вверх
Acer
Дата 3.11.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



логично... Но почему указатели есть везде, а вот строки через одну?  smile 
PM MAIL   Вверх
J0ker
Дата 3.11.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



строки тоже везде есть
только некоторые пустые - т.е. первый символ (индекс 0) содержит конец строки '\0'
как я вижу вы передаете указатель на буфер в какую-то функцию, которая вероятно должна заполнить буфер строкой. Вероятно строка эта пустая.


--------------------
user posted image
PM MAIL   Вверх
Acer
Дата 3.11.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Значит бок не с указателями, а с SQL API... Где-то что-то недосмотрел. Спасибо
PM MAIL   Вверх
J0ker
Дата 3.11.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



посмотрите поведение SQLGetData в случае недостаточного размера буфера
может быть вариант, что если буфер слишком мал, то даже при наличии "чего вернуть" данная функция возвращает пустую строку
для таких вещей я бы рекомендовал проверить, какой максимальный размер для данного типа отводится в БД - обычно эти размеры выводят в библиотеках в виде констант или дефайнов - и используйте буфер размером максимальный_размер+1 (+1 - для символа конца строки)


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.