自己给自己挖的坑,哎。
首先,这个代码的关键点在于for循环的for(i=0;i<=strlen(ch);i++)中的i<=strlen(ch),这个又和ch[i]-=48;有着密切的关系。而判断字符串的长度的标志是‘\0’,而这个标志在ASCII码中是0,就是整数0。
字符串中的数字从0开始,在ASCII码中是从48开始的,在循环在i=0~3的时候,strlen长度是13(就是原来字符串长度),但是到了i=4时候,ch[4]的值由于减去48,即是ASCII中的48减去48,ch[4]的值为ASCII码中的0,即‘\0’,这时候strlen变为4,此时跳出循环,后边的字符串便不会再遍历。。。
int main(int argc, char *argv[])
{
int i,j=0,count=0; //count表示次数
int array[20];
char ch[20]="1233068478900";
for(i=0;i<strlen(ch);i++){
//ch[3]=0,可以看成字符串结束的标志,
//用之不能完全遍历字符数组
ch[i]-=48;
array[i]=ch[i];
count++;
printf("strlen(ch):%d\n",strlen(ch));
printf("count:%d\n",count);
}
printf("数组ch: %s\n",ch);
printf("strlen(ch):%d\n",strlen(ch));
for(i=0;i<count;i++){
printf("%d\t" ,array[i]);
}
printf("%n");
return 0;
}```
/**
运行的结果 :
strlen(ch):13
count:1
strlen(ch):13
count:2
strlen(ch):13
count:3
strlen(ch):13
count:4
strlen(ch):4
count:5
数组ch:
strlen(ch):4
1 2 3 3 0 请按任意键继续. . .