Как использовать формат переменных в `sprintf`
Как мне создать последовательность переменных форматов для sprintf?.< /п>
int i=2,d=9;
String sf;
sprintf(sf,"%%0%d",i);
fprintf(sf,d);
Ожидая результат.
09
Компиляция завершается неудачей с несколькими ошибками в соответствии с неудачным изменением, которое я внес.
Invalid cast from type 'String' to type 'char*'
@Brethlosze, 👍1
Обсуждение1 ответ
Лучший ответ:
sprintf
нельзя использовать для записи данных в объектыString
. Точнее, можно придумать «хакерский» способ записи результата напрямую в объектString
, но последний явно не предназначен для такого использования.Целевой буфер должен представлять собой массив
char
, а неString
. Именно это вам и говорит компилятор.char buffer[64]; sprintf(buffer, "%%0%d", i);
или лучше
char buffer[64]; snprintf(buffer, sizeof buffer, "%%0%d", i);
Строка формата, которую вы использовали в своем
sprintf
, сгенерирует результат%02
(посколькуi
содержит2
в этот момент). Почему вы ожидаете09
, неясно. Почему вы ожидаете, что символ%
исчезнет, также неясно, учитывая, что строка формата, похоже, специально разработана для его включения.- Объект
String
нельзя использовать в качестве первого параметраfprintf
. Непонятно, что этотfprintf
делает в вашем коде.
Очевидно, вы пытаетесь использовать sprintf
для создания другой строки формата во время выполнения (используя i
в качестве ширины поля), которая позже используется для вывода d
переменная. В этом случае это будет что-то вроде
char format[16];
snprintf(format, sizeof format, "%%0%dd", i);
fprintf(file, format, d);
Этот fprintf
действительно выведет 09
.
это может помочь..... https://majko.co.uk/blog/evils-arduino-strings, @jsotola
Подсказка: попробуйте
char sf[32];
, а затем исправьте все остальное., @Mikael Patel