你在遍历字符串长度的时候  用的是str
str 已经发生了改变,后面在做替换的时候  str[] 不会是你以为的结果。。
我也不知道有没有解释清楚。。
你把遍历那部分 改成这样就可以了:    
        char *ptr = str;
        while(*ptr != '\0'){            
            ++originallength;            
            if(*ptr == ' ')
                ++blanklength;            
            ++ptr;
        }