C语言数组截取常见问题
这是一段数组截取的代码,函数功能是检查后面的'*'的数量,若多于指定输入数,则把多余的'*'删除
1 void fun( char *a,int n ) 2 { 3 4 char *p = a; 5 6 while(*p) 7 p++; 8 9 /* 10 while(*p++); 11 */ 12 13 char *p1 = p; 14 int num = 0; 15 while(*(--p1) == '*') 16 num++; 17 18 if(num>n){ 19 *(p-num+n) = '\0'; 20 } 21 }
注释部分是我一开始写的,试了好几次都不行,调试的时候发现第15行 --p1 是没有值的。原因在第10行 *p++,相当于把p(数组首地址)移动到最后,前面的元素全被删除。而p1=p,所以前面没有值。第6、7行相当于p[i],i++,p1=&p[i]。所以可行。