How should I make a variable format sequence for sprintf?.
int i=2,d=9;
String sf;
sprintf(sf,"%%0%d",i);
fprintf(sf,d);
While expecting the output.
09
The compilation fails, with several errors, according the failing change I apply.
Invalid cast from type 'String' to type 'char*'
1 Answer 1
sprintf
cannot be used to write data intoString
objects. More precisely, it is possible to come up with a "hackish" way to write the result directly into aString
object, but the latter is definitely not designed for such use.The target buffer should be an array of
char
, not aString
. Which is what the compiler is telling you.char buffer[64]; sprintf(buffer, "%%0%d", i);
or better
char buffer[64]; snprintf(buffer, sizeof buffer, "%%0%d", i);
The format string you used in your
sprintf
will generate%02
result (sincei
contains2
at that moment). Why you are expecting09
is not clear. Why are you expecting the%
character to disappear is not clear either, considering that the format string seems to be deliberately designed to include it.- A
String
object cannot be used as the first parameter offprintf
. It is not clear what thatfprintf
is doing in your code.
Apparently you are trying to use sprintf
to generate another format string at run time (using i
as field width), which is later used to output the d
variable. In that case that would be something like
char format[16];
snprintf(format, sizeof format, "%%0%dd", i);
fprintf(file, format, d);
That fprintf
will indeed output 09
.
char sf[32];
and then correct the rest.