Что означает% s внутри строкового литерала? - PullRequest
1 голос
/ 09 августа 2011

Я смотрю на следующий код, который нашел в libgksu, и мне интересно, что делает %s внутри строки. Я не могу использовать Google для этого, так как он удаляет символы, такие как процентиль, во время поиска, оставляя меня только с 's' в качестве поискового запроса.

if (!strcmp(context->user, "root"))
        msg = g_strdup_printf (_("<b><big>Enter your password to perform"
                     " administrative tasks</big></b>\n\n"
                     "The application '%s' lets you "
                     "modify essential parts of your "
                     "system."),
                   command);

Цель этого фрагмента кода - предоставить текст для диалогового окна, которое пользователь видит, когда приложение запрашивает привилегии суперпользователя в Linux, как можно увидеть на этом снимке экрана

enter image description here

%s в данном случае - это переменная, которая содержит имя приложения, запрашивающего привилегии, но это не так просто, потому что я видел %s, используемый во всем коде в совершенно разных контекстах. Например, компонент else приведенного выше оператора if равен

else
    msg = g_strdup_printf (_("<b><big>Enter your password to run "
                 "the application '%s' as user %s"
                 "</big></b>"),
               command, context->user);

и %s используются для обозначения имени приложения и пользователя. Может кто-нибудь сказать, пожалуйста, для чего предназначен %s и где я могу узнать больше информации о его использовании? Я предполагаю, что это регулярное выражение, но, как я уже говорил ранее, я не могу Google узнать.

Ответы [ 4 ]

3 голосов
/ 09 августа 2011

printf () имеет длинную историю на основе языка C.%s - это «символ формата», указывающий «вставить строку здесь».Дополнительные параметры после строки в ваших двух вызовах функций - это значения, которые нужно заполнить местозаполнителями символов формата:

В первом примере %s будет заменено содержимым переменной command.Во втором примере первый %s получит command, а второй %s получит context->user.

3 голосов
/ 09 августа 2011

% s - это спецификатор формата C. для строки.

msg = g_strdup_printf (_("<b><big>Enter your password to run "
                         "the application '%s' as user %s"
                         "</big></b>"),
                         command, context->user);

означает «где вы видите первый %s, замените его содержимым command в виде строки и где высм. вторую %s, замените ее содержимым context->user в виде строки.

0 голосов
/ 08 мая 2014

% s будет просто заменено на строку типа

char a [15] = "некоторая строка";

printf («это% s.», А);

, поэтому вывод будет

это какая-то строка.

0 голосов
/ 09 августа 2011

Это флаг формата.Вы можете просмотреть справочную страницу 'printf' для получения дополнительной информации.

По сути, каждый% s будет заменен соответствующим аргументом функции.printf ("% s% s", "hello", "world") напечатает простой "hello world"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...