Это также работает и включает в себя использование указателей. Здесь p указатель, который указывает на имя файла. Тем не менее, я думаю, что его использование является излишним. Если вообще не использовать p, вы можете сказать, что filename - это указатель, который указывает на первый элемент имени файла, то есть filename [0]. Поэтому, когда вы использовали char * filename [8], это было все равно, что сказать, что filename - это указатель, который указывает на указатель ... Надеюсь, это имеет смысл!
typedef uint8_t BYTE;
BYTE buffer[512];
char filename[8];
char *p = filename;
int jpeg_counter = 0;
bool foundStartOfJPEG = false;
FILE *img;
// read memory card until the end of file
while(fread(buffer, sizeof(BYTE) * 512, 1, file) == 1)
{
// if buffer has a signature of JPEG file,
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && ((buffer[3]) & 0xf0) == 0xe0)
{
if (foundStartOfJPEG == true)
{
fclose(img);
}
jpeg_counter += 1;
foundStartOfJPEG = true;
// create a file with index
sprintf(p, "%03i.jpg", jpeg_counter);
// open that file to write into it
img = fopen(p, "w");
// write the block of memory (buffer), to that file
fwrite(buffer, sizeof(buffer), 1, img);
}
else if (foundStartOfJPEG == true)
{
fwrite(buffer, sizeof(buffer), 1, img);
}
}