strmove, strlmove, strlcpy, strlcat - это все не стандартные функции C, поэтому я не могу комментировать то, что они делают, не зная, какую именно нестандартную библиотеку вы используете. Стандарт C предоставляет strcpy, strcat, strncat, strncpy, memmove, memcpy и т. Д.
Имеет смысл использовать strncpy вместо strcpy для безопасности, если вы не знаете, что исходная строка будет помещаться в целевой буфер. Однако strncpy имеет серьезную проблему с производительностью в том, что всегда записывает количество байтов, указанное для размера. То есть:
char buf[4096];
strncpy(buf, "Hello", sizeof buf);
напишет 'H', 'e', 'l', 'l', 'o' и заполнит оставшиеся 4091 байт буфера '\ 0'. Еще одна вещь, о которой следует помнить с помощью strncpy, это то, что она не завершит строку нулем, если параметр size меньше, чем длина строки источника плюс ее ноль. Например:
char buf[5];
strncpy(buf, "Hello", sizeof buf);
запишет 'H', 'e', 'l', 'l', 'o' в buf, и оно не будет заканчиваться нулем.