2 iseuwei ISEUWEI 于 2016.03.06 07:31 提问

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

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

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

6个回答

caozhy
caozhy   Ds   Rxr 2016.03.06 07:42
已采纳

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

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

zuishikonghuan
zuishikonghuan   2016.03.06 07:45

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

fish9670
fish9670   2016.03.06 08:17

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

fish9670
fish9670   2016.03.06 08:19

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

ISEUWEI
ISEUWEI   2016.03.06 18:11

我是初学,想写一个类型转换的函数,没成功图片说明
#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);
}
各位大神看看哪里错了,图片说明

u012979318
u012979318   2016.03.07 04:49

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!