にカウンターint型:その後、基本打ち鳴らす:sprintfのリセットは次のことを考えてみましょう0
int fileNo = 0;
sprintf(outfile, "%03d.jpg", fileNo);
後で
fileNo++; // fileNo equals 1 now
その後、あなたは再びこれを呼び出す場合:
sprintf(outfile, "%03d.jpg", fileNo);
fileNo
は今0に等しいです。再び。
ここでの目標は、カウンターをfileNo
に保ち、その値をsprintf
に渡してファイル名を設定することです。カウンタを文字列値に変換する簡単な方法はありますか?または、私はちょうどfileNo
がゼロにリセットされるのを防ぐかもしれない一歩がありませんか?
私はmalloc
に掘り下げましたが、それが必要なときは本当に明確ではありません。助けて?
(私はプログラミングに新しいものではないんだけど、Cに新しい)
更新
これは非常に単純なプログラムです。再割り当てはありません。デバッガに入ると、sprintf
行が実行された直後にfileNoが0にリセットされます。
...
static int fileNo = 0;
char outfile[7];
sprintf(outfile, "%03d.jpg", fileNo);
...
while(fread(buffer, 1, 512, inptr) == 512)
{
// 0xff 0xd8 0xff
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff)
{
if (!found1stJPG)
{
found1stJPG = true;
} else {
fileNo++;
fclose(outptr);
sprintf(outfile, "%03d.jpg", fileNo); // fileNo is 1 before this executes
printf("outfile: %s,\n", outfile); // in the debugger fileNo is now 0
}
おそらくあなたのコードをもっと表示する必要がありますが、 'fileNo'が有効範囲外にあると思われ、新しい' fileNo'が '0'の値でインスタンス化されます。 'int fileNo = 0;'を 'static int fileNo = 0;'に変更するとどうなりますか? – mttrb
'sprintf'はカウンタを0にリセットしません。あなたのコードはそうです。私たちは見ることができない部分です。 – Jens
[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。そうしないと、私たちがあなたを助けることはほとんど不可能になります。 –