4
int counter = 0;
char *jpg_name;
sprintf(jpg_name, "%3i.jpg", counter);
FILE *photo = fopen( jpg_name, "w");
counter++;

次のエラーが発生し続けます。

'jpg_name' may be used uninitialized in this function [-Werror=uninitialized]

関数を使用してファイル名を書き込もうとしていsprintfます。どういうわけか間違った方法で宣言しているに違いないと思いますがchar*、正しく行う方法がわかりません。

4

2 に答える 2

3

コンテンツではなく、初期化されていないポインタを使用しているため、不平を言っています。mallocいくつかの記憶を試してみてください。

char *jpg_name = malloc(ENOUGH);

charまたは、配列を使用することもできます。


補足:snprintfの代わりに検討することもできますsprintf

于 2012-07-23T18:56:59.843 に答える
0

作成する文字列にメモリを割り当てる必要があります。

char jpg_name[MAX_LEN + 1];
snprintf(s, MAX_LEN, "%3i.jpg", counter);

また、使用することができますmalloc

jpg_name = malloc(sizeof(char) * (MAX_LEN + 1));

あなたの場合、MAX_LEN1桁のカウンターしかないことを前提として、少なくとも5である必要があります。カウンターが数桁に増える可能性がある場合は、より大きなでそれを考慮する必要がありますMAX_LEN

エラーについて:初期化されていない変数を使用している場合、コンパイラは警告を表示します。ある値に設定します。を初期化していないchar*ので、コンパイラは文句を言いますが、これは、たとえば初期化されていない場合にも発生する可能性がありintます。変数をデフォルト値に初期化する習慣を身に付けましょう。

于 2012-07-23T18:57:30.390 に答える