C ++: Как вставить перевод строки в конкатенации sprintf? - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь отправить две команды одновременно с помощью sprintf.Команды должны быть разделены 0x0A (LF).Я думал, что могу ввести специальные символы, используя две косые черты, поэтому я пишу:

sprintf(tmpstr,"VSET1:%ld.%3.3d\\x0AVSET2:%ld.%3.3d",mv/1000, AbsVal((int)mv%1000), mv / 1000, AbsVal((int)mv % 1000));

, и кажется, что распознается только вторая команда (VSET2).

Что я делаю неправильно?

Ответы [ 4 ]

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

Это прекрасно работает.Вы не только вставляете \ n, но и выглядите правильно в коде.Нет необходимости в \ в конце строки либо.Я использую это для больших параграфов.Персональные данные были запутаны.

enter code here

wchar_t msg [200];swprintf (msg, L "XYZ% d: ABCD Limit установлен в% d %%.% d раз, когда он имеет abcd и xyz rstu% d %% \ n" "Вы хотите это исправить? \ n" "Да Да будетисправить это \ n "" Нет проигнорирует это и продолжит \ n "" Отмена прервет выполнение \ n ", xxx, yyy, zzz, aaa);

0 голосов
/ 02 июня 2018

Вы должны использовать одну обратную косую черту вместо двух.Попробуйте следующее утверждение:

sprintf(tmpstr,"VSET1:%ld.%3.3d\x0AVSET2:%ld.%3.3d",mv/1000, AbsVal((int)mv%1000), mv / 1000, AbsVal((int)mv % 1000));

Однако то, что вы сделали в своей программе, напечатает строку "\x0A", а не символ ASCII (0xAA (перевод строки)).

В C все escape-последовательности состоят из двух или более символов, первым из которых является обратный слеш \ (называемый «Escape-символ»);остальные символы определяют интерпретацию escape-последовательности.

C по умолчанию обрабатывает обратную косую черту как escape-последовательности.Однако в вашей программе вы указали компилятору C не использовать обратную косую черту в качестве escape-последовательности, добавив дополнительную обратную косую черту в вашу строку.

0 голосов
/ 02 июня 2018

Используйте \n в строке формата.Кроме того, используйте одну обратную косую черту, а не \\.

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

Используете ли вы \n или \x0AВы должны открыть файл в двоичном режиме, чтобы избежать непереносимых переводов.

См. Escape-последовательности .

0 голосов
/ 02 июня 2018

Когда вы используете \\x0A в строковом литерале, первая обратная косая черта выходит за пределы второй обратной косой черты.В результате строка содержит символ обратной косой черты '\\', за которым следуют символы 'x', '0' и 'A'.

Чтобы использовать символ, представленный 0x0A, необходимоиспользуйте \x0A.

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