所以我做这个家庭作业,我必须通过存储卡,并恢复一些图像,将数据放入缓冲区,从该缓冲区数据创建新的JPEG文件,然后将该数据写入这些新的文件,以获得图像。现在,我被困在如何使用C中的fopen函数打开新创建的文件以写入数据,每个文件都被命名为“#.jpg”,从000.jpg递增到050.jpg。我想我可以一遍又一遍地打开和写入文件,但这显然是本能的错误。
下面是一个粗略的代码片段来解释我的问题。在写这篇文章的时候,我并不是真的担心内存分配或分段故障/错误,我只是想传达我的想法,以便你们都理解我的问题。我试着把file_num放在fopen的结束参数“w”之后,但是得到了一个错误。
#include <stdio.h>
#include <stdlib.h>
const BLOCK_SIZE = 512;
int buffer[BLOCK_SIZE];
unsigned int file_num = 0;
int main()
{
//Open memory card
FILE *pFile = fopen(card.raw, "r");
//Open and create JPEG files
while(fread(buffer, 1, BLOCK_SIZE, pFile) == BLOCK_SIZE)
{
if(some condition)
{
//Create JPEG file
sprintf(pFile, "%.03i.jpg", file_num++);
//Open new JPEG files to write data(this is my problem right here)
FILE *pImg = fopen(###.jpg, "w");
....
}
}
}
字符串
1条答案
按热度按时间weylhg0b1#
您需要一个字符缓冲区来存储
sprintf
创建的 string。此字符串用作fopen
的第一个参数。unsigned int
的printf
说明符是%u
,而不是%i
。下面是一个简单的示例,它创建了 000.jpg 到 050.jpg 的文件。
它还将每个文件的名称写入相应的文件(包含在
< >
中)。字符串
使用中:
型