2015-01-26 4 views
0

Я пытаюсь написать программу, которая берет строку в качестве аргумента командной строки, а затем запускает указанный аргумент через функцию (str_to_int), которая берет строку в качестве ввода. Однако, когда я пытаюсь скомпилировать программу, я получаю предупреждение о том,C: Аргументы командной строки со строкой

initializing 'char *' with an expression of type 'int' [-Wint 
conversion] 
    char* str = atoi(argv[1]); 
    ^ ~~~~~~~~~~~~~ 

И когда я запускаю программу, я получаю ошибку сегментации Я протестировал str_to_int много, так что я уверен, что проблема заключается в программе командной строки. Вот код для него.

#include "hw3.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(int argc, char *argv[]) 
{ 
    char* str = atoi(argv[1]); 
    printf("%d\n", str_to_int(str)); 
    return 0; 
} 

Может ли кто-нибудь сказать мне, что я делаю неправильно? Благодарю.

+0

'atoi' возвращает' int'. –

+1

Ваш код берет строку ('argv [1]'), преобразует ее в 'int' (' atoi() '), помещает результат в строку (' char * '), которая будет испорчена, и затем преобразует его в 'int' (' str_to_int() '). Какая цель здесь ?! – Biffen

+0

remyabel и Biffen (и компилятор :-)) являются правильными. –

ответ

0

Это все, что вам нужно, хотя оно будет разбиваться, если вы оставите аргумент командной строки.

{ 
    printf("%d\n", str_to_int(argv[1])); 
    return 0; 
} 

Это более надежный:

int main(int argc, char *argv[]) 
{ 
    if (argc == 1) 
     printf("missing parameter."); 
    else 
     printf("%d\n", str_to_int(argv[1])); 

    return 0; 
} 
+0

1-й не обязательно сбой, зависит от 'str_to_int' и если принимает нулевой указатель как действительный аргумент или нет. – hyde

0
#include "hw3.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(int argc, char *argv[]) 
{ 
    char* str = argv[1]; 
    printf("%d\n", str_to_int(str)); 
    return 0; 
} 
0

просто удалить atoi вызов функции, и он должен работать

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