Mouais, si tu es débutant dans ce domaine, tu vas te prendre une douche froide: dépendemment de la qualité de conversion que tu veuilles, le code peux devenir extrêmement imbitable.
L'implémentation de référence dans ce domaine s'appelle "dtoa.c", tu peux voir le code source ici :
http://www.netlib.org/fp/dtoa.c
Le premier truc qui saute aux yeux, c'est que c'est moche. Même en virant les trucs obsolète (genre prototypes pré-c89), ça reste difficilement bitable. Déjà ce code contient 2 fonctions publiques (ouais, ça saute pas aux yeux) : strtod (ce que tu dois chercher) et dtoa (la réciproque de strtod, donc, en général utilisé par la fonction printf()). Pourquoi est-ce si compliqué ? Parce qu'il y a une tétrachiée de cas spécifiques (NaN, Infinity, flottant non normalisé, type d'arrondi) et si tu veux vraiment bien faire les choses, à savoir, garantir que ta chaine de caractère sera convertie en la plus proche valeur permise par le type (float ou double), bah, ça devient très vite le bordel.
Sinon, il existe des implémentations de strtod un peu moins complète que dtoa(), et leur code est en général un peu plus bitable.