Можно ли использовать strlcpy для копирования массива в себя?
Задача: удалить "\n" в начале массива.
Пример:
char s_msg[15] = "\nHello world!";
void setup()
{
Serial.begin(115200);
Serial.println("Load");
// Поиск \n
if(strstr(s_msg, "\n") != NULL) {
Serial.println(s_msg);
strlcpy(s_msg, &s_msg[1], sizeof(s_msg));
Serial.println(s_msg);
}
}
void loop() {}
Описание: Если в начале сообщения присутствует символ \n, то копируем исходный символ в такой же символ, но без \n.
Вопрос: можно ли копировать char сам в себя (s_msg — это буфер назначения и исходная строка одновременно)
@Delta, 👍-1
Обсуждение1 ответ
Лучший ответ:
▲ 4
Эта страница руководства по strlcpy()
совершенно ясно:
Если строки
src
иdst
перекрываются, поведение не определено.
Это означает, что вам следует избегать его, даже если он работает в некоторых тестах.
совет, который вы получили о том, чтобы просто попробовать, не хороший совет. Использовать
Вместо этого memmove()
.
,
@Edgar Bonet
Смотрите также:
- устаревшее преобразование из строковой константы в 'char*'
- как быстро loop() работает в Arduino
- как отправить аргумент объектам ESP8266WebServer в функции
- Arduino синтаксический анализ строки с использованием sscanf
- Объявление переменной внутри основного цикла
- Как создать проект ардуино с несколькими исходными файлами?
- Как преобразовать символ Unicode в «Unicode HEX Position» в Arduino
- lcd.createChar() позволяет использовать только 8 произвольных символов
Почему ты спрашиваешь? ... сначала попробуйте, а затем задайте вопрос, если это не работает должным образом, @jsotola
Документация
strlcpy()
должна вам сказать. Вы также можете изучитьmemmove()
иmemcpy()
., @the busybeeэтим функциям 50 лет. есть книги и множество интернет-сайтов, описывающих их, @Juraj
другой вопрос, зачем вам удалять листвующий символ?, @jsotola