Как использовать переменную в качестве строки формата в printk? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать команду printk.

Все примеры, которые я могу найти в Интернете, - это поместить строку прямо в принтке так:

printk(KERN_INFO "Hello %s!", "World");

Однако япопытался заменить "Hello% s!"используя такой буфер:

char buf[] = "Hello %s!";
printk(KERN_INFO buf, "WORLD");

Получается, что я получаю ошибку

error: expected ')' before 'buf'

Что мы должны сделать, чтобы использовать переменную в printk, а также использовать уровень журнала KERN_INFO?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

KERN_INFO определяется как строковые константы "\ 001" "6".При записи

printk(KERN_INFO "Hello %s!", "World");

компилятор c автоматически объединяет три строковые константы, как того требует стандарт C:

"\001" "6" "Hello %s!"

в одну строковую константу.Это, однако, не работает с переменной, например: buf здесь:

char buf[] = "Hello %s!";
printk(KERN_INFO buf, "WORLD");

Что будет работать :

char buf[] = KERN_INFO "Hello %s!";
printk(buf, "WORLD");
0 голосов
/ 30 января 2019

KERN_INFO - это макрос, определенный в заголовках ядра Linux, который расширяется до строкового литерала при запуске препроцессора.При размещении строковых литералов рядом в коде C они неявно объединяются;при размещении переменной между строковыми литералами это синтаксическая ошибка.

Если вы предварительно обработаете свой код в файле, это будет легче заметить.

...