Как использовать формат переменных в `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