Моя идея состояла в том, чтобы объявить указатель char * temp в самом начале моей функции, который можно использовать снова и снова.
Сначала я использовал malloc в самом начале и free () всамый конец.Проблема заключалась в том, что первая строка, которую я скопировал в temp, была самой длинной из всех строк.Поэтому, когда я печатал строки, которые следовали за первой, конец первой строки был все еще там: например, первая строка была "привет", следующая была "нет" -> я записал temp в ФАЙЛ, и результат был nollo
Чтобы решить эту проблему, я решил использовать free () каждый раз после того, как записал строку в свой файл, чтобы освободить хранилище для следующей строки.Это вызвало ошибку «ошибка для объекта 0x7fe274801000: освобожденный указатель не был выделен».
Так что ни одна из моих идей не сработала ... Каков наилучший способ справиться с этим?Спасибо !!
void hexdump (FILE *output, char *buffer, int length){
int offset = 0;
int rows = (length%16)==0 ? (length/16) : ((length/16)+1);
char *temp = (char *)malloc(MAX_OUTPUT);
for(int j = 0; j<rows; j++){
offset = offset + 16;
sprintf(temp, "%06x : ", offset);
fwrite(temp, sizeof(char), sizeof(temp), output);
printf("%06x : ", offset);
free(temp);
for(int i = 0; i<16; i++){
if ((j == rows-1) && (!buffer[i+(j*16)])){
strcpy(temp," ");
fwrite(temp, sizeof(char), sizeof(temp), output);
printf(" ");
free(temp);
} else {
sprintf(temp, "%02x ", buffer[i+(j*16)]);
fwrite(temp, sizeof(char), sizeof(temp), output);
printf("%02x ", buffer[i+(j*16)]);
free(temp);
}
}
strcpy(temp, " ");
fwrite(temp, sizeof(char), sizeof(temp), output);
printf(" ");
free(temp);
for(int n = 0; n<16; n++){
if ((j == rows-1) && (!buffer[n+(j*16)])){
strcpy(temp, " ");
fwrite(temp, sizeof(char), sizeof(temp), output);
printf(" ");
free(temp);
} else {
if((buffer[n+(j*16)]>31) && (buffer[n+(j*16)]<127)){
sprintf(temp, "%c", buffer[n+(j*16)]);
fwrite(temp, sizeof(char), sizeof(temp), output);
printf("%c", buffer[n+(j*16)]);
free(temp);
} else {
strcpy(temp, ".");
fwrite(temp, sizeof(char), sizeof(temp), output);
printf(".");
free(temp);
}
}
}
strcpy(temp, "\n");
fwrite(temp, sizeof(char), sizeof(temp), output);
printf("\n");
free(temp);
}
}
Вывод printf работает правильно, а выходной файл - нет ..