LINUX.ORG.RU

atof ?


0

0

Посмарите на код ниже. str - указатель на строку из последовательности цифр ("1234567890"), int n=4:
    int i;
    char *tmp;
    float rez;
    
    tmp=malloc(n);
    for(i=0;i<=n;i++)
	tmp[i]=str[i];
    printf("=>%s\n",tmp);

    rez=atof(tmp);
    printf("=>=>%f\n",rez);
    free(tmp);
результат выполнения:
=>12345
=>=>0.000000
а надо, чтоб вместо этих 7 нулей было тоже 12345, т.е. надо содержимое tmp засунуть в rez, но как?
anonymous


1. Если n==4 то tmp=malloc(n) выделит 4 байта,
однако ты затем в цикле суешь в tmp _пять_
байтов - от 0 до 4 включительно.
Налицо buffer overflow ;-)

2. Отсутствует завершающий ноль в tmp,
типа tmp[6]=0; впрочем, места ты для
него тоже не выделил.

3. atof() возвращает double, который ты преобразуешь
в float. Это именно то, что ты хочешь во всех
ситуациях ?

4. Вместо atof() IMHO используй strtod() для лучшей
обработки ощибок.

HTH


anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.