2014-11-16 2 views
1

Простой вопрос я имеющий раздражающий время с:литейные основные аргументы Int

Мой главный настроен так:

int main(int argc, char *argv[]){ 

    int i = (int) argv[1]; 
    cout << "Inputted value: " << i << endl; 
    return 0; 
} 

Если я скомпилировать и выполнить с g++ main.cc -o main и main 5 я получаю Результат мусора снова на cout. Как исправить эту проблему кастинга?

+7

аргументы командной строки принимаются как строки (даже если они строки цифр). Чтобы преобразовать строку в число, вы должны использовать что-то вроде 'std :: stoi'. –

+0

Именно поэтому броски C-стиля опасны. – aschepler

+1

@remyabel: Приведение из 'char *' в 'int' является совершенно законным, хотя результат в лучшем случае определяется реализацией. И предупреждение «теряет точность», вероятно, зависит от относительных размеров «char *» и «int»; на многих системах они являются 32 битами. (Хотя «точность» на самом деле не применяется к значениям указателя.) –

ответ

2

Вы пытаетесь ввести строку в int, которая не будет работать. Вам нужно использовать одну из функций преобразования целых чисел.

int atoi (const char * str); 

MSDN

+0

Нет, он пытается использовать * указатель * для 'int'. –

+0

Цель zZShort_CircuitZz состояла в том, чтобы вывести строку в целое число, что на самом деле не так. – Bart

+0

'atoi' - ужасный выбор. Пожалуйста, прочтите http://stackoverflow.com/a/6154614/103167 –

Смежные вопросы