как сохранить в файл? |
Здравствуйте, гость ( Вход | Регистрация )
как сохранить в файл? |
deex |
2.7.2010, 11:42
Сообщение
#1
|
Студент Группа: Участник Сообщений: 45 Регистрация: 12.3.2009 Пользователь №: 608 Спасибо сказали: 0 раз(а) Репутация: 0 |
использую curl, чтобы скачать картинку
он вызывает внешнюю функцию для записи в файл curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write); в оригинале она записывает данные в файл через fwrite() решил переписать на Qt: static size_t write(void *buffer, size_t size, size_t nmemb, void *stream) { QFile file("test.png"); file.open(stderr, QIODevice::WriteOnly); file.write(buffer, size * sizeof(float)); file.close(); return; } 1. file.write не хочет принимать void *buffer. что это вообще такое? 2. просто уточнить - curl вызывает эту функцию один раз? или по мере скачивания файла, дописывая полученные данные? 3. что вернуть в ретурн, чтобы был size_t ps заодно, прошу прояснить для меня что вообще такое size_t частно вижу его, но в стандартных типах его нет. зачем его используют и почему пишут именно t? |
|
|
Алексей1153 |
2.7.2010, 15:35
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а так
size_t - обычно это typedef int size_t Сообщение отредактировал Алексей1153 - 2.7.2010, 15:39 |
|
|
DEADHUNT |
2.7.2010, 15:41
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
лучше как-то так:
Сообщение отредактировал DEADHUNT - 2.7.2010, 15:42 |
|
|
Алексей1153 |
2.7.2010, 15:48
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
А вот тут автору надо уточнить
size_t n = size * sizeof(float); может, size - это уже размер в байтах (как у белых людей принято) ? |
|
|
deex |
3.7.2010, 20:11
Сообщение
#5
|
Студент Группа: Участник Сообщений: 45 Регистрация: 12.3.2009 Пользователь №: 608 Спасибо сказали: 0 раз(а) Репутация: 0 |
спасибо, но повторю ещё раз:
- я хочу переписать на Qt - что такое void *buffer -- почему его можно записывать в файл и почему оно void? - что за тип size_t ? зачем он нужен? ещё раз достигнутое:
на данный момент вылетает и я не очень понимаю как в QtCreator отследить ошибку Сообщение отредактировал deex - 3.7.2010, 20:13 |
|
|
Алексей1153 |
3.7.2010, 20:22
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
что такое void *buffer Удивляешь... В языках C/C++ void - это пустой тип. Указатель на void - указатель на любой тип (поэтому необходимо в нагрузку знать размер элемента плюс размер массива, или же размер массива в байтах сразу) В данном случае buffer - буфер с данными, а size (как я полагаю) - размер буфера в байтах почему его можно записывать в файл записать в файл можно что угодно. что за тип size_t ? зачем он нужен? чисто блажь разработчиков. Мысленно считай его типом int на данный момент вылетает и я не очень понимаю как в QtCreator отследить ошибку в какой момент вылетает ? Запустить под отладкой и поставить точку останова в начале функции static size_t write(void *buffer, size_t size, size_t nmemb, void *stream) Потом шагать по строчке |
|
|
DIMEDROLL |
6.7.2010, 8:16
Сообщение
#7
|
Участник Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: 0 |
size_t это не int, a unsigned int, максимальное значение на 32битной системе = 4 ГБ
size_t - это тип-размер, используется для индексации массивов например, указания размера массивов и т.п. |
|
|
Алексей1153 |
6.7.2010, 9:28
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
size_t это не int, a unsigned int, максимальное значение на 32битной системе = 4 ГБ Один хрен, назвать как угодно можно Главное - смысл. А знаковый/не знаковый легко приводится Даже если предположить, что это знаковое, всё равно массивов с таким индексом вряд ли встретишь. Даже если это массив байтов Сообщение отредактировал Алексей1153 - 6.7.2010, 9:29 |
|
|
Текстовая версия | Сейчас: 30.1.2025, 2:03 |