问题描述
- 初学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被使用后再自减
时间: 2024-09-13 05:53:18