Вы должны использовать strcat
с достаточно большим целевым массивом.
Использование sprintf
с тем же массивом, что и у целевого и строкового аргумента для %s
, имеет неопределенное поведение.Большинство существующих реализаций будут давать ожидаемый результат для конкретного случая в вопросе, но стандарт C делает его явно неопределенным.
Компилятор по праву жалуется с предупреждением, которое может быть трудно расшифровать:
passing argument 1 to restrict-qualified parameter aliases with argument 3
Это означает, что аргумент 3 перекрывается с массивом, на который указывает аргумент 1, что неверно, если массив, на который указывает аргумент 3, разыменовывается, потому что он будет псевдонимом памяти, разыменованным через аргумент 1, который объявленкак restrict
указатель в прототипе sprintf
, подразумевая, что никакой другой указатель не должен читать или записывать память, к которой осуществляется доступ через него.
Угловой регистр, такой как sprintf(someString, "%.0s%s", someString, someOtherString);
, имеет определенное поведение, если подходит someOtherString
в someString
, поскольку аргумент 3 не разыменовывается, но компилятор может по-прежнему выдавать предупреждение.