-1

おそらくそれを行うスマートな方法がありますが、とにかくこれでエラーが発生します:

-(int*)decimalBinary:(int)decimal
{
    int i=0;
    int *bin;
    while (decimal!=0)
    {
        bin[i]=decimal%2;
        decimal=decimal/2;
        i++;
    }

    return bin;

}

モジュロライン上。なぜ ?そして、それを配列にするより良い方法は何ですか?

4

2 に答える 2

0

次のコードは、整数をバイナリ形式で出力する方法に関する この回答から改作されています。「2 進数」を int 配列に格納することは、以下のコードに追加されています。

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* strtol */

const char *byte_to_binary(long x);

int main(void)
{
    long lVal;
    int i, len, array[18];
    char buf[18];

    {   /* binary string to int */
        char *tmp;
        char *b = "11010111001010110";

        lVal=strtol(b, &tmp, 2); //convert string in "base 2" format to long int
        printf("%d\n", lVal);
    }
    {
        printf("%s", byte_to_binary(lVal));
        /* byte to binary string */
        sprintf(buf,"%s", byte_to_binary(lVal));
    }
    len = strlen(buf);
    for(i=0;i<len;i++)
    {   //store binary digits into an array.
        array[i] = (buf[i]-'0');    
    }
    getchar();
    return 0;
}

const char *byte_to_binary(long x)
{
    static char b[17]; //16 bits plus '\0'
    b[0] = '\0';
    char *p = b;  

    int z;
    for (z = 65536; z > 0; z >>= 1)    //2^16
    {
        *p++ = (x & z) ? '1' : '0';
    }
    return b;
}
于 2013-09-18T18:05:56.183 に答える
0

宣言する

int *bin;

ポインター用のスペースを確保しますが、オブジェクトを指すようにはしません。bin使用する前に初期化することが重要です。
問題を解決するにはbin[4]、呼び出し元関数 ( int main) で配列を宣言してから、呼び出し元関数に渡し*binます。

于 2013-09-18T16:59:49.203 に答える