Я получаю ошибку сегментации в строке 28 приведенного ниже кода. Примечание: программа не завершена.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// get data
FILE* raw = fopen("card.raw", "r");
int rawLength = 0;
while(fgetc(raw) != EOF){
rawLength++;
}
char dat[rawLength + 1];
fread(dat, 1, rawLength + 1, raw);
// separate data into blocks
int data[sizeof(dat) / 512][512];
data[0][0] = atoi(*dat[0]); // <----------- this is line 28 where the error is happening.
for(int i = 0; i < sizeof(data) / 4; i += 512)
{
for(int j = 0; j < 512; j++)
{
data[i][j] = atoi(*dat[i + j]);
}
}
}
Этот код должен открыть необработанный файл с именем «card.raw» и прочитать его содержимое и размер. Затем он проверяет наличие jpeg внутри файла, используя официальный заголовок jpeg: «0xff 0xd8 0xff [что-то от 0xe0 до 0xef]».
На данный момент это все, что он делает, но когда я закончу с ним, он должен сохранить каждый найденный jpeg в новом файле. По сути, это система восстановления jpeg, поскольку папка для мусора ваших устройств похожа на нее. Все, о чем я прошу, это выяснить ошибку; вам не нужно писать целую программу восстановления, если вы не можете прямо сейчас. спасибо за помощь! 🙂
Почему бы тебе не попробовать его отладить? Если вы не можете использовать отладчик, добавьте распечатки. Например, проверьте / распечатайте значение rawLength, длину dat после того, как вы прочитали его из raw файла. Я предполагаю, что dat не '\0' прекращено, но вы можете понять это без помощи Stackoverflow. — person person the human schedule 23.05.2020
Неясно, подходит ли содержимое файла для atoi; в любом случае он не должен вылетать, если dat не завершается нулевым символом. Добавьте memset (dat, 0, sizeof (dat)); сразу после объявления char dat[rawLength + 1];. В худшем случае массив будет содержать 0 в последней позиции. — person person the human schedule 23.05.2020
fread ничего не читает. После fgetcreturn EOF это конец файла — больше нечего fread. Какое значение имеет rawLength? Кроме того, я не верю, что вы понимаете, что делает atoi. Чего вы ждете на выходе? Хранит ли файл строку с нулевым завершением? — person person the human schedule 23.05.2020
спасибо @KamilCuk за подсказку, но у меня все еще та же проблема на той же строке. — person person the human schedule 23.05.2020
