C ++ std :: string Код InputIterator для кода C - PullRequest
1 голос
/ 12 февраля 2010

У меня есть какой-то код C ++, который я нашел и который делает именно то, что мне нужно, однако мне это нужно в C, и я не знаю, как я мог бы сделать это в C, поэтому я надеюсь, что кто-то может мне помочь.

Код C ++:

std::string value( (const char *)valueBegin, (const char *)valueEnd );

Это использует конструктор string :: string:

template<class InputIterator> string (InputIterator begin, InputIterator end);

Может кто-нибудь помочь мне в преобразовании этого кода в C?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 12 февраля 2010
// Get the number of characters in the range
size_t length = valueEnd - valueBegin;

// Allocate one more for the C style terminating 0
char *data = malloc(length + 1);

// Copy just the number of bytes requested
strncpy(data, valueBegin, length);

// Manually add the C terminating 0
data[length] = '\0';
0 голосов
/ 12 февраля 2010

Предполагая, что арифметика указателей имеет смысл в вашей ситуации:

strncpy( value, valueBegin, valueEnd-valueBegin );
0 голосов
/ 12 февраля 2010

Код C ++ создает новую строку из подстроки другой строки. Похожая функциональность в C: strndup:

char *str = strndup(valueBegin, valueEnd - valueBegin);
// ...
free(str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...