2017-03-22 11 views
0

私はPHPプログラマであり、Cプログラムの作成をテストし、引数を渡して、PHPで出力するのはshell_exec()です。整数値がCで正しく表示または計算されないのはなぜですか?

とにかく、私は単純に一緒に2つの数値を追加するには、このコードを書いた:

#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)またはコマンドラインからプログラムを実行すると、次の結果が得られます。

./mycprogram.exe 25 25

The result of 7150824 add 7149184 = 14300008

その後、私は再びそれを実行し、取得:

明らか

The result of 6692040 add 6692072 = 13384112

私は結果が50ことを期待しています。

どうして私は正しい結果を得られませんか?

答えて

4

問題は、(一般的にはargv[n]、)argv[1]では、intにあなたが引数として渡されたかもしれない対応する整数を与えるものではありません文字列 catingへのポインタです。前記

leftop = (int) argv[1]; 

ようなステートメント(単数または複数)の有効性は、実装固有の動作であり、ポインタ・ツー・整数変換の妥当性として、高濃度実装依存です。いくつかのケースでは、それはundefined behaviorを引き起こします。

ソリューション:あなたは整数型に文字列を変換するstrtol()を使用する必要があります。

+0

ご回答いただきありがとうございます。なぜint型にキャストすると値が得られるのか説明できますか?私はCがもう少し何をしているのかを理解するのに役立つでしょうか? –

+1

@AdamCopleyすでに答えを更新しました。 –

+0

私は実際にメモリアドレスを整数にキャストしましたか?したがって、大きな数字ですか? –

関連する問題