I was assigned to make a int to binary converter. I made one and it work as it should however when attempting to make a char pointer and print the char array the pointer is pointing to it print weird character which I am guessing is the memory location. Am I using pointer right?

#include <stdio.h>
#include <string.h>

char* tobinary(int x)
{
	char bin[8] = {'0', '0', '0', '0', '0', '0', '0', '0'};

	int num[8] = {128, 64, 32, 16, 8, 4, 2, 1};
	
	int i;
	for (i = 0; i < 8; i++)//pass
	{
		if (x >= num[i])//pass
		{
			x -= num[i];//pass
			bin[i] = '1';
		}
	}
	printf("%s", bin);//pass
	char* ptr = bin;
	printf("%s", ptr);//pass
	return ptr;	
}

void main()
{
	char input_num[256];
	printf("Enter a Integer\n");
	fgets(input_num, 256, stdin);
	input_num[strlen(input_num)-1] = '\0';

	int x = atoi(input_num);
	printf("%s", tobinary(x));
	printf("\n");
	//tobinary(x);
}

Edited 5 Years Ago by zetologos: n/a

>>printf("%s", bin);//pass

bin must be a null-terminated character array if you want to use printf() to display its contents. For example. Note that you don't have to specifiy its size, the compiler will figure that out for you from the list of initializers. char bin[] = {'0', '0', '0', '0', '0', '0', '0', '0',0};

Edited 5 Years Ago by Ancient Dragon: n/a

it works when inside the method:
printf("%s", bin);//print char array PASS
char* ptr = bin;

printf("%s", ptr);//print char pointer PASS
return ptr;

Change: char bin[8] = {'0', '0', '0', '0', '0', '0', '0', '0'};
To: static char bin[8] = {'0', '0', '0', '0', '0', '0', '0', '0'};

So that the variable hangs around after the function ends.

Edited 5 Years Ago by jnawrocki: n/a

This article has been dead for over six months. Start a new discussion instead.