плавать из char* в c

Как практика, я пытаюсь сделать простую поддельную оболочку с 2 простыми командами. это также мой первый раз, когда я использую strtok. требуется команда (получить или установить) и параметр для доступа (ширина, высота и т. д.). моя проблема в том, что третий аргумент - это число с плавающей запятой, и я хочу преобразовать его из char *, который возвращает strtok, в переменную с плавающей запятой, в которой я пытаюсь ее сохранить. В данный момент я в растерянности. Раньше я был довольно эффективен в с, но после нескольких лет перерыва я был поражен тем, как много я забыл языка. Любая помощь приветствуется. Меня сейчас нет дома, но если нужно, то выложу код.

Спасибо за уделенное время.


person dhott    schedule 04.08.2013    source источник


Ответы (2)


Возможно, вы находясь в поиске? Берет char* (например, из strtok) и превращает его в двойное.

person jpw    schedule 04.08.2013
comment
Вау, спасибо большое. Очень быстрый ответ. В любом случае я могу +1 вам. Новичок на этом сайте, не привык к работе, но еще раз спасибо. Я собирался биться головой о стену - person dhott; 04.08.2013
comment
@Toxor Вы можете и должны принять ответ, который лучше всего решает вашу проблему. В этом случае ответ, данный Вадимом, более полный, чем тот, который дал я, поэтому вы должны принять его ответ. Когда и если вы приобретете больше репутации в будущем, вы можете проголосовать за полезные ответы. - person jpw; 04.08.2013

Чтобы разобрать Double, ваши варианты:

  1. strtod() — см. здесь или здесь

  2. atof() — см. здесь

  3. sscanf() — см. здесь

atof не позволяет проверить число, он вернет 0,0, если синтаксический анализ завершится неудачно. sscanf немного громоздкий, а форматирование %f может присутствовать не во всех системах. Попробуйте посмотреть на strtod или strtof (если вам нужны поплавки).

Вы можете использовать его так (txt — это ваш char*)

char *end;
float num = strtof(txt, &end);
if (end != txt + strlen(txt))
{
    // This means something went wrong
}
else
{        
    // This means everything is OK
}
person Vadim    schedule 04.08.2013
comment
Танкуй и ты. Я думаю, что strtof лучше подойдет для этой цели - person dhott; 04.08.2013
comment
Проверка ошибок не очень хорошая. if (end != txt) не означает, что все прошло нормально. Вместо этого вы должны использовать if (end == txt + strlen(txt)). - person ; 04.08.2013
comment
Спасибо. Исправил мой ответ. - person Vadim; 04.08.2013
comment
Хорошо, теперь мой gdb не будет работать на kubuntu. Что здесь происходит. Я продолжаю ловить sigsev и не могу запустить gdb, чтобы понять это. Как опубликовать код? - person dhott; 05.08.2013