Вопрос по c – Как я могу напечатать одну и ту же переменную в строку несколько раз?

13

У меня есть строка формата, как это:

<code>buf[] = "A%d,B%d,C%d,D%d,F%d,G%d,H%d,I%d,J%d";
</code>

и я хочу вставить одно и то же целое число для каждого%d поэтому я использую:

<code> int val = 6;
 sprintf(buf2, buf, val,val,val,val,val,val,val,val,val);
</code>

Могу ли я использоватьsprintf таким образом, что требуется только от меня, чтобы написатьval один раз иsprintf будет использовать его для каждого%d?

Ваш Ответ

1   ответ
17

%1$d каждый раз.1$ ссылаясь на второй аргумент, вы, очевидно, могли бы сделать это и с другими аргументами.

Демо-версия:http://codepad.org/xVmdJkpN

Обратите внимание, что указатель положения является расширением POSIX, поэтому он может работать не с каждым компилятором. Если вам это нужно, например, для работы с компилятором Visual C ++ рассмотрите возможность использования уродливого способа повторения аргумента или вообще не используйте функцию в стиле printf. Другим вариантом будет использование POSIX-совместимой реализации sprintf или использование нескольких вызовов для добавления одного числа каждый раз в цикле (в случае, если строка формата создается динамически, что не позволит вам указать правильное количество аргументов).

На заметку,sprintf необходимо избегать. использованиеsnprintf(buf2, sizeof(buf2), ....) вместо. Конечно это требуетbuf2 иметь статический размер, известный во время компиляции - но если вы выделите его вручную, вы можете просто использовать переменную, содержащую длину, вместоsizeof(buf2).

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededen.wikipedia.org/wiki/…
Error: User Rate Limit Exceeded%1$d так какvalError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы