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*
,但我不确定如何正确地做到这一点。
答案 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
。养成将变量初始化为默认值的习惯。