Подтвердить что ты не робот

Определение строки по нескольким строкам

Просьба принять следующее:

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..

Любые идеи? Это просто неправильный подход, чтобы попытаться разбить строку на несколько строк кода?

4b9b3361

Ответ 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);