Определение строки по нескольким строкам
Просьба принять следующее:
char buffer[512];
memset(buffer, 0, sizeof(buffer));
sprintf(&buffer[0],"This Is The Longest String In the World that in text goes on and..");
printf("Buffer:%s\r\n",buffer);
Я хотел бы иметь возможность создавать эту строку на нескольких строках, чтобы упростить поиск и устранение неполадок. Однако, когда я использую команду \
, мой вывод разделяется на то, что выглядит как вкладки?
Пример:
sprintf(&buffer[0],"This Is The\
Longest String In the World\
that in text goes on and..");
выводит вывод:
Buffer:This Is The Longest String In the World that in text goes on and..
Любые идеи? Это просто неправильный подход, чтобы попытаться разбить строку на несколько строк кода?
Ответы
Ответ 1
Продолжение новой строки учитывает любые пробелы внутри кода.
Вы можете использовать конкатенацию строковых литералов для лучшей читаемости:
sprintf(buffer, "This Is The "
"Longest String In the World "
"that in text goes on and..");
Используя \
, вам нужно будет начать продолжение строки в столбце 0:
sprintf(buffer, "This Is The \
Longest String In the World \
that in text goes on and..");
Ответ 2
Хотя это может показаться педантичным, я был достаточно укушен в реальном мире, чтобы иметь следующие проблемы с двумя другими опубликованными ответами.
-
Два опубликованных ответа не учитывают пробелы между словами, соединяющими
отдельные строковые литералы (очевидно, после первого теста).
-
Если ваша строка действительно длинная, используйте snprintf()
вместо этого - она немного
неудобно, но он говорит кому-то, кто просматривает ваш код, который вам известен
общих опасностей при обслуживании кода.
-
Если ваша строка содержит %
, вы получите предупреждение компилятора
(хорошие) или случайные ошибки сегментации (плохо). Поэтому используйте "%s"
или, возможно, в
этот случай просто strcpy().
(через два месяца сотрудник мог легко добавить 99.9%
в сообщение.)
-
Использование memset(),
, которое я часто вижу, просто грузило
программирование. Да, в особых случаях это нужно, но используя
он все время отправляет неправильное сообщение.
-
И, наконец, зачем кому-то использовать &buffer[0]
, когда просто buffer
будет?
Итак, чтобы подвести итог, ваш код должен, возможно, читать:
char buffer[512];
snprintf(buffer, sizeof buffer, "%s",
"This is The Longest String "
"In the World that in text "
"goes on and on and on and on ....");
printf("Buffer:%s\r\n", buffer);
Ответ 3
Это тоже будет работать:
char buffer[512];
sprintf(&buffer[0], "This is the longest string"
"in the world that in text"
"goes on and on and on and on ....");
printf("%s\n", buffer);