'jpg_name'可以在此函数中未初始化使用[-Werror = uninitialized]

时间:2012-07-23 18:55:35

标签: c pointers char

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*,但我不确定如何正确地做到这一点。

2 个答案:

答案 0 :(得分:3)

它抱怨,因为你使用的是未初始化的指针,而不是因为内容。尝试malloc一些记忆。

char *jpg_name = malloc(ENOUGH);

或者您可以使用char数组。


附注:您可以考虑snprintf而不是sprintf

答案 1 :(得分:0)

您需要为正在构建的字符串分配内存。

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

您还可以使用malloc

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

在您的情况下,MAX_LEN应该至少为5,假设您只有一位数的计数器。如果您的计数器可以增长到多位数,则需要考虑更大的MAX_LEN

至于你的错误:当你使用尚未初始化的变量时,编译器会发出警告:设置为某个值。您没有初始化char*,因此编译器会抱怨,但这也可能发生,例如未初始化的int。养成将变量初始化为默认值的习惯。