Convertir char * a flotar o doblar

Tengo un valor que leí en un archivo y se almacena como un char *. El valor es un número monetario, #. ##, ##. ## o ###. ##. Quiero convertir el char * a un número que pueda usar en los cálculos, he intentado atof and strtod y me han dado números de basura. ¿Cuál es la forma correcta de hacer esto y por qué la forma en que lo estoy haciendo mal?

Esto es esencialmente lo que estoy haciendo, solo el valor char * se lee desde un archivo. Cuando imprimo las variables temp y ftemp, son simplemente basura, números negativos gigantescos.

Otra edición:

Estoy ejecutando exactamente esto en gcc

#include <stdio.h>
int main()
{
 char *test = "12.11";
 double temp = strtod(test,NULL);
 float ftemp = atof(test);
 printf("price: %f, %f",temp,ftemp);
 return 0;

}

y mi salida es el precio: 3344336.000000, 3344336.000000

Edit: Aquí está mi código

if(file != NULL)
    {
        char curLine [128];
        while(fgets(curLine, sizeof curLine, file) != NULL)
        {               
            tempVal = strtok(curLine,"|");          
            pairs[i].name= strdup(tempVal);
            tempVal = strtok(NULL,"|");
            pairs[i].value= strdup(tempVal);
            ++i;
        }
        fclose(file);
    }

    double temp = strtod(pairs[0].value,NULL);
    float ftemp = atof(pairs[0].value);
    printf("price: %d, %f",temp,ftemp);

Mi archivo de entrada es un nombre muy simple, pares de valores como este:

NAME|VALUE
NAME|VALUE
NAME|VALUE

siendo el valor montos en dólares

SOLUCIONADO: Gracias a todos, estaba usando% d en lugar de% f y no tenía los encabezados correctos incluidos.

Respuestas a la pregunta(3)

Su respuesta a la pregunta