Как использовать формат переменных в `sprintf`

printf

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

, 👍1

Обсуждение

это может помочь..... https://majko.co.uk/blog/evils-arduino-strings, @jsotola

Подсказка: попробуйте char sf[32];, а затем исправьте все остальное., @Mikael Patel


1 ответ


Лучший ответ:

3
  1. sprintf нельзя использовать для записи данных в объекты String. Точнее, можно придумать «хакерский» способ записи результата напрямую в объект String, но последний явно не предназначен для такого использования.

    Целевой буфер должен представлять собой массив char, а не String. Именно это вам и говорит компилятор.

    char buffer[64];
    sprintf(buffer, "%%0%d", i);
    

    или лучше

    char buffer[64];
    snprintf(buffer, sizeof buffer, "%%0%d", i);
    
  2. Строка формата, которую вы использовали в своем sprintf, сгенерирует результат %02 (поскольку i содержит 2 в этот момент). Почему вы ожидаете 09, неясно. Почему вы ожидаете, что символ % исчезнет, также неясно, учитывая, что строка формата, похоже, специально разработана для его включения.

  3. Объект String нельзя использовать в качестве первого параметра fprintf. Непонятно, что этот fprintf делает в вашем коде.

Очевидно, вы пытаетесь использовать sprintf для создания другой строки формата во время выполнения (используя i в качестве ширины поля), которая позже используется для вывода d переменная. В этом случае это будет что-то вроде

char format[16];
snprintf(format, sizeof format, "%%0%dd", i);
fprintf(file, format, d);

Этот fprintf действительно выведет 09.

,