请问一个C的有关问题

请教一个C的问题
C/C++ code

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
size_t str_len(char *string)
{
    int length = 0;
    while(*string++ != '\0')
    {
        length +=1;

    }
    return length;
}
int main()
{


    char ch = 'a';
    char *cp = &ch;
    printf("str_len(cp)=%d",str_len(cp));
    printf("sizeof(cp)=%d",sizeof(cp));
    printf("strlen(cp)=%d\n",strlen(cp));
    *(cp+1)='c';
    printf("%c\n",*cp);
    printf("%c\n",ch);
    printf("%c\n",*(&ch+1));
    printf("%c\n",*cp+1);
    //printf("*++cp=%c\n",*++cp);
    printf("*cp++=%c\n",*cp++);
    printf("%c\n",*cp);
    char **c=&cp;
    printf("%c\n",**c);
    printf("str_len(cp)=%d",str_len(cp));
    printf("sizeof(cp)=%d",sizeof(cp));
    printf("strlen(cp)=%d",strlen(cp));
    return 0;
}





结果是:
str_len(cp)=1sizeof(cp)=4strlen(cp)=1
a
a
c
b
*cp++=a
c
c
str_len(cp)=11sizeof(cp)=4strlen(cp)=11
为什么呢




------解决方案--------------------

char ch = 'a';
char *cp = &ch;

木有明确的结束符\0,崩了也不奇怪。