existe-t-il une fonction C standard C similaire à Strtol, qui prendra une chare * et une longueur pour une chaîne non nulnulée? P>
Je sais que je pourrais copier la chaîne dans une région désignée des nuls, mais pour des raisons d'efficacité indésirables. P>
merci. p>
4 Réponses :
Strntol est probablement ce que vous êtes après ... ce n'est pas standard c, cependant. P>
Aucune fonction de ce type dans la bibliothèque standard. Vous devrez soit utiliser la méthode tampon temporaire, soit écrire votre propre fonction à partir de zéro. P>
Si vous êtes que em> pressé pour une efficacité, vous pouvez probablement motiver le temps d'écrire et de déboguer le vôtre. Mais: faites-le simplement avec une copie; Vous avez probablement une limite supérieure pendant combien de temps la chaîne peut être (un chiffre décimal qui convient à un Voici un point de départ rugueux (non testé, écrit de navigateur): p> long code> a une limite supérieure stricte sur sa longueur maximale), de sorte que vous pouvez avoir un tampon statique. Ensuite, profilez toute votre application et voyez si la copie / la conversion est vraiment un goulot d'étranglement. Si c'est vraiment, alors vous savez que vous devez écrire votre propre. P>
long limited_strtol(const char *string, size_t len)
{
long sign = 1;
long value = 0;
for(; len > 0 && *string == '-'; string++, len--)
sign *= -1;
for(; len > 0 && isdigit(*string); string++, len--)
{
value *= 10;
value += *string - '0';
len--;
string++;
}
return sign * value;
}
Vous devez convertir en non signé Char code> avant de passer à
isdigit code>
Pour répondre à votre question: Non, il n'y a pas de fonction standard, mais il est assez simple d'écrire votre propre:
Bonjour, je viens du futur. Croiriez-vous que 10 ans plus tard, il n'y a toujours pas de solution standard qui ne nécessite pas de copier la chaîne sur un tampon temporaire? Et rappelez-vous que Simpsons épisode a été diffusé en 2000 où Trump était le président des États-Unis? Vous ne le croirez pas si je vous disais ...
@ user1593842 Si vous êtes prêt à utiliser la bibliothèque standard C ++, en.cppreference.com/w / cpp / utilitaire / de_chars est une solution décente.