How to print a string in c without p┐ at the end of the string


so i've been writing a program that convert a decimal number to it's boolean representation but every time i compile the return value which is a string show additional characters like p┐ here is the program

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

void main (void)
    signed char str[256];
    int dec,rest;
    int i = -1;
    int j;
    printf ("write a decimal number : ");
    scanf ("%d",&dec);
        rest = dec % 2;
        dec/= 2;
        for (j=i;j>-1;--j)
    } while (dec!=0);
    printf ("the binary representation of this number is %s",str);

the output :

write a decimal number : 156
the binary representation of this number is 10011100p┐

i don't know if im missing something but i will be grateful if you guys help me

In C and C++, strings are null-terminated, this means that every valid string must end with a character with code 0. This character tells every function that is dealing with this string that it is in fact over.

In your program you create a string, signed char str[256]; and it is initially filled with random data; this means that you reserved space for 256 characters and they are all garbage, but the system does not know they are invalid. Try printing this string and see what happens.

In order to actually tell the system that your string is over after say, 8 characters, the 9th character hast to be the NUL character, or simply 0. In your code you can do it in two ways:

  • after the loop, assign str[i] = 0, or (even simpler)
  • initialize the string as signed char str[256]={0};, whiche creates the storage and fills it with nulls; after writing to the string you can be sure that the character after the last one you've written will be a NUL.