#define MAX(a, b) ((a) > (b) ? (a) : (b)) char* addBinary(char* a, char* b) { char* result = malloc(sizeof(char) * (MAX(strlen(a), strlen(b)) + 2)); char in = '0'; int sum = 0; while(*a && *b) { sum = *a + *b + in - 3 * '0'; switch(sum) { case 0: in = '0'; *result = '0'; break; case 1: in = '0'; *result = '1'; break; case 2: in = '1'; *result = '0'; break; case 3: in = '1'; *result = '1'; break; } result++; } }