Convertendo char * em float ou double

Eu tenho um valor que eu li em um arquivo e é armazenado como um char *. O valor é um número monetário, #. ##, ##. ## ou ###. ##. Eu quero converter o char * para um número que eu possa usar em cálculos, eu tentei atof e strtod e eles apenas me dão números de lixo. Qual é a maneira correta de fazer isso e por que a maneira como estou fazendo errado?

Isto é essencialmente o que eu estou fazendo, apenas o valor char * é lido de um arquivo. Quando eu imprimo as variáveis ​​temp e ftemp, elas são apenas lixo, números negativos gigantescos.

Outra edição:

Estou correndo exatamente isso no 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;

}

e minha saída é preço: 3344336.000000, 3344336.000000

Edit: Aqui está o meu 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);

meu arquivo de entrada é um nome muito simples, pares de valores como este:

NAME|VALUE
NAME|VALUE
NAME|VALUE

com o valor sendo quantias em dólares

RESOLVIDO: Obrigado a todos, eu estava usando% d em vez de% f e não tinha os cabeçalhos certos incluídos.

questionAnswers(3)

yourAnswerToTheQuestion