このCプログラムがこの結果を表示するのはなぜですか?

Leon.Zhou

演算子 '$' '〜' '|'を使用してバイナリ文字列を他のバイナリ文字列に変更するプログラムをコーディングしようとしています。

しかし、結果は奇妙だと思います。
結果が異なる理由を教えてください。

int main(int argc, char * argv[])
{
    char bstring[sizeof(int) * 8 + 1];
    int a, b;

    if(argc != 3)
    {
        printf("Usage: %s binary string 1 binary string 2.\n", argv[0]);
        exit(1);
    }
    a = stoi(argv[1]);
    b = stoi(argv[2]);

//  printf("%s\n%s\n",itos(~a,bstring),itos(~b,bstring));
//  why the result is different with next two statements?
    printf("~argument1 %s is %s.\n", argv[1], itos(~a,bstring));
    printf("~argument2 %s is %s.\n", argv[2], itos(~b,bstring));
    printf("argument1 & argument2 is %s.\n", itos(a & b, bstring));
    printf("argument1 | argument2 is %s.\n", itos(a | b, bstring));
    printf("argument1 ^ argument2 is %s.\n", itos(a ^ b, bstring));

    return 0;
}


int stoi(char *sp)
{
    int sum = 0;
    while(*sp != '\0')
    {
        sum = sum * 2 + (*sp++ - '0');
    }
    return sum;
}

char * itos(int n, char *sp)
{
    int i;
    static int size = sizeof(int) * 8;
    for(i = size - 1; i >=0; i--, n >>= 1)
    {
        sp[i] = (n & 01) + '0';
    }
    sp[size] = '\0';
    return sp;
}

結果は次のとおりです。

ここに画像の説明を入力してください

ヨアヒムザウアー

あなたのitosリターン渡されたバッファのアドレス。

stoiこの行の両方の呼び出しに同じバッファーを渡すので、次のようになります

printf("%s\n%s\n",itos(~a,bstring),itos(~b,bstring));

2回目の呼び出しでは、バッファの内容が上書きされます。printf次に、同じバッファ(2番目の呼び出しで書き込まれたコンテンツを含む)を2回出力するため、同じ出力が2回取得されます。

このように出力を2つの異なる呼び出しに分割するprintfと、次のように機能するはずです。

printf("%s\n", itos(~a, bstring));
printf("%s\n", itos(~b, bstring));

または、2つの異なるバッファを使用することもできます。

char astring[sizeof(int) * 8 + 1];
char bstring[sizeof(int) * 8 + 1];
printf("%s\n%s\n", itos(~a, astring), itos(~b, bstring));

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

このプログラムが `YES`と` true`で異なる結果を生成するのはなぜですか?

分類Dev

この短いCプログラム「32」の結果はなぜですか?

分類Dev

このプログラムの結果が常にゼロになるのはなぜですか?

分類Dev

このC ++プログラムがCode :: BlocksとオンラインIDEの間で異なる結果を返すのはなぜですか?

分類Dev

なぜプログラムは空の結果を表示するのですか?

分類Dev

この同じプログラムのcバージョンとfortranバージョンが異なる結果を生成するのはなぜですか?

分類Dev

この同期されたプログラムが間違った結果を返すのはなぜですか?

分類Dev

このプログラムの結果、すべての場合で0%になるのはなぜですか?

分類Dev

異なるプログラムを使用すると、このコードが異なる結果を返すのはなぜですか?

分類Dev

このLinqPadプログラムが2回目の実行で異なる結果を生成するのはなぜですか?

分類Dev

このAnsiCプログラムで結果が得られないのはなぜですか?

分類Dev

このHaskellプログラムを-fllvmでコンパイルすると異なる結果が得られるのはなぜですか?

分類Dev

このプログラムが出力を生成するのはなぜですか

分類Dev

このプログラムが「1」を出力するのはなぜですか?

分類Dev

このプログラムで3を超える数値が表示されないのはなぜですか?

分類Dev

このC ++プログラムが出力を表示しないのはなぜですか?

分類Dev

単語を逆にするこのc ++プログラムが機能しないのはなぜですか

分類Dev

このプログラムがこのような出力を作成するのはなぜですか?

分類Dev

このhtmlプログラムがこのような出力を提供するのはなぜですか?

分類Dev

このプログラムがループするのはなぜですか?

分類Dev

このプログラムがこの数値を出力するのはなぜですか?

分類Dev

このプログラムが一度表示して入力を要求するのではなく、出力を無限に表示するのはなぜですか

分類Dev

このHaskellプログラムが分岐するのはなぜですか?

分類Dev

このcppプログラムが失敗するのはなぜですか?

分類Dev

変数の初期化の位置を変更するたびに、このcプログラムの出力が異なる結果をもたらすのはなぜですか?

分類Dev

Cのこのプログラムがクラッシュするのはなぜですか?

分類Dev

なぜこのプログラムは4を出力するのですか?

分類Dev

このプログラムが2ではなく3を出力するのはなぜですか?

分類Dev

scanf( "%d"、&number)がCプログラミングで 'a'を29と結果するのはなぜですか?

Related 関連記事

  1. 1

    このプログラムが `YES`と` true`で異なる結果を生成するのはなぜですか?

  2. 2

    この短いCプログラム「32」の結果はなぜですか?

  3. 3

    このプログラムの結果が常にゼロになるのはなぜですか?

  4. 4

    このC ++プログラムがCode :: BlocksとオンラインIDEの間で異なる結果を返すのはなぜですか?

  5. 5

    なぜプログラムは空の結果を表示するのですか?

  6. 6

    この同じプログラムのcバージョンとfortranバージョンが異なる結果を生成するのはなぜですか?

  7. 7

    この同期されたプログラムが間違った結果を返すのはなぜですか?

  8. 8

    このプログラムの結果、すべての場合で0%になるのはなぜですか?

  9. 9

    異なるプログラムを使用すると、このコードが異なる結果を返すのはなぜですか?

  10. 10

    このLinqPadプログラムが2回目の実行で異なる結果を生成するのはなぜですか?

  11. 11

    このAnsiCプログラムで結果が得られないのはなぜですか?

  12. 12

    このHaskellプログラムを-fllvmでコンパイルすると異なる結果が得られるのはなぜですか?

  13. 13

    このプログラムが出力を生成するのはなぜですか

  14. 14

    このプログラムが「1」を出力するのはなぜですか?

  15. 15

    このプログラムで3を超える数値が表示されないのはなぜですか?

  16. 16

    このC ++プログラムが出力を表示しないのはなぜですか?

  17. 17

    単語を逆にするこのc ++プログラムが機能しないのはなぜですか

  18. 18

    このプログラムがこのような出力を作成するのはなぜですか?

  19. 19

    このhtmlプログラムがこのような出力を提供するのはなぜですか?

  20. 20

    このプログラムがループするのはなぜですか?

  21. 21

    このプログラムがこの数値を出力するのはなぜですか?

  22. 22

    このプログラムが一度表示して入力を要求するのではなく、出力を無限に表示するのはなぜですか

  23. 23

    このHaskellプログラムが分岐するのはなぜですか?

  24. 24

    このcppプログラムが失敗するのはなぜですか?

  25. 25

    変数の初期化の位置を変更するたびに、このcプログラムの出力が異なる結果をもたらすのはなぜですか?

  26. 26

    Cのこのプログラムがクラッシュするのはなぜですか?

  27. 27

    なぜこのプログラムは4を出力するのですか?

  28. 28

    このプログラムが2ではなく3を出力するのはなぜですか?

  29. 29

    scanf( "%d"、&number)がCプログラミングで 'a'を29と結果するのはなぜですか?

ホットタグ

アーカイブ