Можно ли использовать 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 — это буфер назначения и исходная строка одновременно)

, 👍-1

Обсуждение

Почему ты спрашиваешь? ... сначала попробуйте, а затем задайте вопрос, если это не работает должным образом, @jsotola

Документация strlcpy() должна вам сказать. Вы также можете изучить memmove() и memcpy()., @the busybee

этим функциям 50 лет. есть книги и множество интернет-сайтов, описывающих их, @Juraj

другой вопрос, зачем вам удалять листвующий символ?, @jsotola


1 ответ


Лучший ответ:

4

Эта страница руководства по strlcpy() совершенно ясно:

Если строки src и dst перекрываются, поведение не определено.

Это означает, что вам следует избегать его, даже если он работает в некоторых тестах. совет, который вы получили о том, чтобы просто попробовать, не хороший совет. Использовать Вместо этого memmove().

,