Поиск:

Ответ в темуСоздание новой темы Создание опроса
> strncpy теряет байты 
:(
    Опции темы
nikkadim
Дата 25.7.2012, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день,

Есть unsigned char **ptr,

Инициализирую ее вот так:
Код

    mImageSaveDlg->ptr = (unsigned char**) calloc(numBlock,sizeof(char*));
    for(int i=0; i<numBlock; i++) {
        mImageSaveDlg->ptr[i] = (unsigned char*) calloc(1,2170691);
        if(!mImageSaveDlg->ptr[i]) {
            t.Format(_T("ERROR with %d block!"),i);
            MessageBox(t);
            break;
        }
    }


Здесь все ОК.
Далее в некой функции получаю параметром ссылку на строку массив байт изображения (char*)buf и добавляю ее в свой ptr:

Код


     strncpy((char*)ptr[mFramesCount], (char*)buf,2170691);



Массивы полчаются под 0.5-1.5GB, и все вроде бы ОК, но часто  массив скопированный таким образом из buf в конце не имеет нескольких сотен килобайт, т.е. там нули. 
причем исходный массив buf полный, проверял это сбрасывая его параллельно на диск. 

Вопрос, от чего такое может происходить? Может кто-то не успевает?

Спасибо.
PM MAIL   Вверх
586
Дата 25.7.2012, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 6
Всего: 146



Цитата(nikkadim @  25.7.2012,  20:17 Найти цитируемый пост)
Далее в некой функции получаю параметром ссылку на строку массив байт изображения (char*)buf и добавляю ее в свой ptr:
Код
     strncpy((char*)ptr[mFramesCount], (char*)buf,2170691);

Изображения? Функция strncpy для работы со строками. Для копирования памяти используется memcpy.
PM   Вверх
nikkadim
Дата 25.7.2012, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(586 @ 25.7.2012,  19:44)
Цитата(nikkadim @  25.7.2012,  20:17 Найти цитируемый пост)
Далее в некой функции получаю параметром ссылку на строку массив байт изображения (char*)buf и добавляю ее в свой ptr:
Код
     strncpy((char*)ptr[mFramesCount], (char*)buf,2170691);

Изображения? Функция strncpy для работы со строками. Для копирования памяти используется memcpy.

а какая тут разница, если у меня байт-массив?

PS:
Заменил на 
Код

memcpy ((char*)ptr[mFramesCount], (char*)buf, 2170691);

изображения пустые..


PPS: Жму руку! Кажется вы были правы! Все зарабоатало как надо!
Видимо он находил в изображениях символ '\0' и завершал копирование? Так?

Это сообщение отредактировал(а) nikkadim - 25.7.2012, 20:22
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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