OP использует неправильный метод размера fwrite()
, среди других мелких ошибок.
Если «массив символьных указателей, хранящих 8186 байт» означает
1 каждая char
массив имеет значительные 8186 байт данных, использование размера 8186.
2 каждый char
массив представляет собой завершенную нулем строку, то испытание должно произойти для обеспечения каждого из них, по крайней мере, длина 6. Не уверен, что это такое 6. Примечание: size_t fwrite (const void * ptr, size_t size, size_t count, FILE * stream)
Я подозреваю, что OP-х - 6
вызывает проблему, когда strlen(ptr[i])
меньше 6. Это сделало бы отрицательную разницу в очень большой size_t
, который, как правило, без знака для count
в fwrite()
.
for(int i = 0; i < 64048; i++){ // start at 0
if(ptr[i] != NULL){
int result;
result = fwrite(ptr[i], 1, 8186, file);
if (result != 8186) ; handle error;
// or
size_t len = strlen(ptr[i]) + 1; /// Add 1 for the NUL byte
if (len < 6) ; handle error of whatever the OP's 6 is about.
result = fwrite(ptr[i], 1, len, file);
if (result != len) ; handle error;
free(ptr[i]);
}
}
Сколько времени это займет? Вы пишете файл размером 8186 x 64048 или более 500 МБ. Я мог понять, почему это займет много времени. – lurker
Есть ли способ избежать вызова strlen? –
Взял около 10 минут, чтобы закончить, мне нужно передать более 1 ГБ файла по UDP. Пока что я тестирую только 500 МБ. –