Вы выделяете 100 байтов, хорошо
char *str=malloc(sizeof(char)*100);
int length=0;
printf("Enter string :\n");
У вас есть строка, но вы читаете один символ
scanf("%c",str);
Пока этот символ равен! = 0 Вы увеличиваете символ на один, например 'A'становится' B 'и т. д. символ переполняется
while(*str)
{
length++;
*str++;
Вместо этого читайте строку, используя fgets ()
const int maxlen = 100;
char *str=malloc(maxlen);
if (fgets(str,maxlen,stdin) != NULL)
{
// now to calculate the length
int length = 0;
char* p = str; // use a temp ptr so you can free str
while (*p++)
{
++length;
}
printf("length=%d", length);
free(str); // to avoid memory leak
}