Если длина строки, которую вы желаете скопировать неизвестно, вы можете использовать snprintf
здесь. Эта функция отправляет отформатированный результат на str. Он действует аналогично sprintf()
, но вместо этого не записывает больше байтов, выделенных str. Если результирующая строка длиннее n-1
символов, то оставшиеся символы не учитываются. Он также всегда включает нулевой ограничитель \0
, если размер буфера не равен 0
.
Это была бы альтернатива strncpy()
или strcpy()
, если вы действительно не хотите ее использовать. Однако вручную добавление нулевого терминатора в конце строки с strcpy()
- это простой и эффективный подход. В C очень нормально добавлять нулевой ограничитель в конце любой обработанной строки.
Вот основной пример использования sprintf()
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1024
int main(void) {
const size_t N = SIZE;
char str[N];
const char *example = "Hello World";
snprintf(str, sizeof(str), "%s", example);
printf("String = %s, Length = %zu\n", str, strlen(str));
return 0;
}
, которая печатает:
String = Hello World, Length = 11
Этот пример показывает, что snprintf()
копируются "Hello World"
в str
, а также добавили \0
терминатор на конец.
Примечание:strlen()
работает только нулем строки, и будет вызывать undefined behaviour, если строка не нулем. snprintf()
также нуждается в дополнительной проверке ошибок, которую можно найти на man page.
Как говорили другие, это не эффективный подход, но он есть, если вы смотрите.
Посмотрите на [ 'strncpy_s'] (http://en.cppreference.com/w/c/string/byte/strncpy) –
Посмотрите на [ссылка] (HTTP: // WWW. cplusplus.com/reference/cstring/strncpy/). Вы можете использовать strcpy() или добавить символ самостоятельно, если знаете значение n. destination [n] = '\ 0' – Carles
@Carles Yea Я знаю, но я хочу знать функцию, которая автоматически добавляет нулевой символ в конце строки –