Saber se o array é numero ou não

Eu preciso saber se o que o usuário digitou é ou não um numero, exp: 123232;123.123;1232,23223;-123233;-12.123;-45,545; 34/54; 343,2323/123.23) é um numero
não é um numero se o usuario digita algo que não tá [42,57] na tabela ascii ex(12.12a32; 12,~~~~21)
e eu não consigo achar o que tá errado no meu código,
plz help

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

int main()
{
char str[1000];
int c, i=0;

printf("Digite um numero.\n");
gets(str);
int  tamanho= strlen(str);
int certo=0;
printf("Vc digitou %d caracteres e eles ", tamanho);
while(i<=tamanho){

    if ((str[i]>=42)&&(str[i]<=57))
        certo++;
    if((str[i]<=42)&&(str[i]>=47))
            certo++;
    if((str[i]>=0)&&(str[i]<=41))
        certo--;

    if((str[i]>=58)&&(str[i]>=127))
        certo--;

    i++;
}
if(tamanho==certo){
    printf("formam um numero\n");}
else {
    printf("nao formam um numero\n");
}

}

while(i<tamanho)

Precisa ser menor ( < ) e não menor igual ( <= ) , porque quando colocar o igual ele pega o final de string que é (\0) e que está fora do seu intervalo.