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_LEN应该至少为 5,假设您只有个位数的计数器。如果您的计数器可以增长到多位数,则需要使用更大的MAX_LEN.

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

于 2012-07-23T18:57:30.390 回答