初学C语言中数组下标的问题

void strtol(char s[]){
int i=0;
while(s[i++]);
while(i>=0)
s[i--]=s[i];

发现没有报错,怎么解释呢
显然会出现s[0]=s[-1]不是吗

s[i--]=s[i];
这个执行的是s[i]=s[i];
i--;

再说了,就算数组访问下溢,也不会报错。

s[-1]相当于*(s-1),也就是说数组的第一项之前的一字节内存。越界了。编译器没有你想象的那么智能,所以没报错

你先要弄清变量的自加减,而且C语言在数组下标越界时不会报错。建议把自加减换成i-1

i=0时有个下标等于-1,i应该大于0

我是初学,想写一个类型转换的函数,没成功图片说明
#include
char inttoch_I(int i){
char ch=(char)(i+'0');
return ch;
}
void strtor_I(char *s){
int i=0;
while(s[i++]);
while(i>0) s[i--]=s[i];
}
char *inttostr_I(int i){
char str[16];
for(;i;i/=10){
strtor_I(str);
str[0]=inttoch_I(i%10);
}puts(str);
return str;
}
void main(){
inttostr_I(3241);
}
各位大神看看哪里错了,图片说明

i --是在i被使用后再自减