Получить часть массива символов - PullRequest
10 голосов
/ 24 января 2011

Я чувствую, что это действительно глупый вопрос, но, похоже, я нигде не могу найти ответ!

Можно ли получить группу символов из массива символов? сбросить какой-нибудь псевдокод:

char arry[20] = "hello world!";
char part[10] = arry[0-4];
printf(part);

выход:

hello

Итак, могу ли я получить сегмент символов из массива, подобного этому, без зацикливания и получения их символ за символом или преобразования в строки, чтобы я мог использовать substr ()?

Ответы [ 4 ]

15 голосов
/ 24 января 2011

Вы можете использовать memcpy (или strncpy), чтобы получить подстроку:

memcpy(part, arry + 5 /* Offset */, 3 /* Length */);
part[3] = 0; /* Add terminator */

В другом аспекте вашего кода учтите, что выполнение printf(str) может привести к уязвимости форматной строки, если str содержит ненадежный ввод.

15 голосов
/ 24 января 2011

Короче, нет.«Струны» в стиле C просто так не работают.Вам придется либо использовать ручной цикл, либо strncpy(), либо сделать это с помощью C ++ std::string.Учитывая, что вы находитесь в C ++, вы также можете делать все со строками C ++!

Примечание

Как это бывает, для вашего конкретного примера приложенияможно добиться этого просто с помощью функциональности, предлагаемой printf():

printf("%.5s\n", arry);
5 голосов
/ 24 января 2011

Как сказал Оли, вам нужно использовать функциональность C ++ std::string. В вашем примере:

std::string hello("Hello World!");
std::string part(hello.substr(0, 5)); // note it's <start>, <length>, so not '0-4'

std::cout << part;
0 голосов
/ 24 января 2011

Ну, вы упомянули два очевидных подхода.Единственное, о чем я могу думать, это определить собственный тип подстроки для работы с массивами символов:

...