2010-02-12 4 views
1

J'ai un code C++ que j'ai trouvé qui fait exactement ce dont j'ai besoin, mais j'en ai besoin en C et je ne sais pas comment je pourrais le faire en C, donc je suis En espérant que quelqu'un puisse m'aider.C++ std :: string Code InputIterator en C code

Le code C++ est:

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

est d'utiliser la chaîne :: constructeur de chaîne:

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

Quelqu'un peut-il me aider à convertir ce au code C?

Merci!

Répondre

7
// 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'; 
+1

La mémoire 'malloc()' 'd devra également être 'free()'' d. – mskfisher

+0

Fonctionne parfaitement! Je vous remercie! – kdbdallas

+0

Aussi, pour ne pas provoquer d'avertissement, le second paramètre de strncpy doit être casté en: (const char *) – kdbdallas

0

Le code C++ crée une nouvelle chaîne à partir de la sous-chaîne d'une autre chaîne. fonctionnalité C est en similaire strndup:

char *str = strndup(valueBegin, valueEnd - valueBegin); 
// ... 
free(str); 
+1

strndup est une extension GNU. –

0

En supposant que l'arithmétique de pointeur sens dans votre situation:

strncpy(value, valueBegin, valueEnd-valueBegin); 
+0

Son exemple crée 'value' en tant que variable automatique, mais vous supposez que' value' est un pointeur sur la mémoire valide. – mskfisher