2017-03-22 11 views
0

무역으로 저는 PHP 프로그래머이고 C 프로그램을 테스트하고, 인수를 보내고, PHP로 결과를 shell_exec()을 사용하여 테스트하려고합니다.정수 값이 C에서 올바르게 표시되거나 계산되지 않는 이유는 무엇입니까?

어쨌든, 나는 단순히 두 개의 번호를 추가하려면이 코드를 작성 :

#include <stdio.h> 

int leftop, rightop, result; 

int main(int argc, char *argv[]) 
{ 
    leftop = (int) argv[1]; 

    rightop = (int) argv[2]; 

    result = leftop + rightop; 

    printf("The result of %i add %i = %i\n", leftop, rightop, result); 
    getchar(); 
    return 0; 
} 

내가 MinGWgcc -o main.c mycprogram.exe를 사용하여 컴파일.

shell_exec() (php) 또는 명령 줄에서 프로그램을 실행할 때 다음과 같은 결과가 나타납니다.

The result of 7150824 add 7149184 = 14300008

./mycprogram.exe 25 25

는 내가 다시 실행 얻을 :

The result of 6692040 add 6692072 = 13384112

분명히 나는 ​​결과가 50이 될 것으로 기대합니다.

어떻게 올바른 결과를 얻지 못합니까? (일반적으로 argv[n]) 문제가

답변

4

, argv[1]int에 당신이 인수로 전달 수도 대응하는 정수를 제공하지 않는다는 문자열과 감시에 대한 포인터입니다. 말했다

,

leftop = (int) argv[1]; 

같은 문 (들)의 유효 기간은 구현 고유의 동작입니다 포인터에 정수 변환의 유효 기간으로, 많이 구현에 의존한다. 일부 경우에는 undefined behavior이 발생합니다.

솔루션 : 당신은 유형을 정수로 문자열을 변환하는 strtol()를 사용한다.

+0

답장을 보내 주셔서 감사합니다. int로 캐스팅 한 결과 값을 얻었을 가능성이 있습니까? C가 무엇을 더하고 있는지 이해하는 데 도움이됩니까? –

+1

@AdamCopley 이미 답변을 업데이트했습니다. –

+0

그래서 메모리 주소를 정수로 효과적으로 캐스팅 했습니까? 그러므로 큰 숫자? –