Как скопировать строку в массив символов в C ++, не переходя через буфер - PullRequest
21 голосов
/ 22 мая 2010

Я хочу скопировать строку в массив char, а не переполнить буфер.

Поэтому, если у меня есть массив char размера 5, я хочу скопировать максимум 5 байтов из строкив это.

какой код для этого?

Ответы [ 11 ]

0 голосов
/ 22 мая 2010
std::string my_string("something");
char* my_char_array = new char[5];
strncpy(my_char_array, my_string.c_str(), 4);
my_char_array[4] = '\0'; // my_char_array contains "some"

С помощью strncpy вы можете скопировать не более n символов из источника в место назначения. Тем не менее, обратите внимание, что если длина исходной строки не превышает n символов, назначение не будет завершено нулем; Вы должны положить в него завершающий нулевой символ самостоятельно.

Массив char длиной 5 может содержать не более 4 символов, поскольку 5-й должен быть завершающим нулевым символом. Следовательно, в приведенном выше коде, n = 4.

...