Converting an integer to binary in C

后端 未结 12 1102
别跟我提以往
别跟我提以往 2021-02-02 04:30

I\'m trying to convert an integer 10 into the binary number 1010.

This code attempts it, but I get a segfault on the strcat():

int int_to_bin(int k)
{
          


        
12条回答
  •  故里飘歌
    2021-02-02 04:48

    You need to initialise bin, e.g.

    bin = malloc(1);
    bin[0] = '\0';
    

    or use calloc:

    bin = calloc(1, 1);
    

    You also have a bug here:

     bin = (char *)realloc(bin, sizeof(char) * (sizeof(bin)+1));
    

    this needs to be:

     bin = (char *)realloc(bin, sizeof(char) * (strlen(bin)+1));
    

    (i.e. use strlen, not sizeof).

    And you should increase the size before calling strcat.

    And you're not freeing bin, so you have a memory leak.

    And you need to convert 0, 1 to '0', '1'.

    And you can't strcat a char to a string.

    So apart from that, it's close, but the code should probably be more like this (warning, untested !):

    int int_to_bin(int k)
    {
       char *bin;
       int tmp;
    
       bin = calloc(1, 1);
       while (k > 0)
       {
          bin = realloc(bin, strlen(bin) + 2);
          bin[strlen(bin) - 1] = (k % 2) + '0';
          bin[strlen(bin)] = '\0';
          k = k / 2;
       }
       tmp = atoi(bin);
       free(bin);
       return tmp;
    }
    

提交回复
热议问题