| Как напечатать не ASCIIZ строку, если известна её длина? |
|
| Добавил(а) microsin |
|
Для печати строки, которая не завершается нулевым символом (не ASCIIZ), но известна её длина, есть несколько способов в зависимости от контекста. 1. Вывод строк с помощью printf, используя формат "%.*s" с указанием точной длины: printf("%.*s", length, string_ptr); Например: char buffer[100] = "Hello World"; // Нет гарантии нулевого символа В ESP-IDF можно использовать ESP_LOGI с таким же форматом: ESP_LOGI(TAG, "%.*s", length, string_ptr); 2. Создание временной строки на стеке (общий случай, C/C++) void print_non_asciiz(const char* str, size_t len) { 3. Использование fwrite для прямого вывода fwrite(string_ptr, 1, length, stdout); fputc('\n', stdout); // Добавить перевод строки если нужно 4. Использование write (POSIX) write(STDOUT_FILENO, string_ptr, length); write(STDOUT_FILENO, "\n", 1); 5. Печать по одному символу с ограничением длины Если строка может быть очень длинной или не содержать нулевой символ: void safe_print(const char* str, size_t max_len) { [Вывод не ASCIIZ-строк на языке C++] 6. Использование std::string_view (C++17) #include < string_view> 7. Использование std::string std::string s(string_ptr, length); std::cout << s << std::endl; [Ссылки] 1. Секреты printf. |