2014-04-29 2 views
-8
int main(int argc, char *argv[]) 
{ 
    int param = *argv[1]; 
    printf("Parameter = %d\n",param); 
} 

나는 그것을 실행합니다 ./myProgram 5와 나는 5를 출력으로 기대합니다. 내가 얻는 것은 웬일인지 53이다.매개 변수가 C로 전달됩니다

+1

argv의 각 구성원은 문자열이며, 정수 인 것처럼 취급합니다. 정수를 원한다면 예를 들어 atoi를 사용하여 추출해야합니다. – fvu

+4

힌트 : 53 = '5'(ASCII)입니다. – nneonneo

답변

3

선언에서 알 수 있듯이 argv는 char 포인터의 배열입니다. 즉, 주 함수에 숫자 값 5가 전달되지 않고 (아마도 ASCII 또는 UTF8) 인코딩 된 문자열 값 "5"가 전달됩니다. ASCII table을 보면 문자 "5"가 숫자 값 53으로 ASCII로 인코딩되어있는 것을 볼 수 있습니다. 문자 "a"가 숫자 97로 인코딩되어 있으므로 ./myProgram a을 실행하면 Parameter = 97을 출력해야합니다.

ASCII 인코딩 된 문자열의 숫자 값을 가져 오려면 atoi()를 사용할 수 있습니다. 쓰기

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

atoi()가 작동하지 않습니다. "분할 오류 (코어 덤프)" – kulan

+1

atoi() 함수는 char 포인터에서 작동하므로'* argv [1]'에서 별표를 제거하십시오. –

+0

예. atoi()가 작동합니다. – kulan

1

C는 암시 적으로 배열의 내용을 모든 유형으로 변환하지 않습니다.

0strtol() 사용을 고려 intchar -array (A C "문자열")로 끝나는 변환하려고합니다.

관련 문제