下标访问越界(C 语言:char *s。s[n]是否为空的问题

A?B:C的意思就是如果满足A的条件就实现B下标访问越界,否则实现C

比如:printf(\"%d\\n\",(str1[0]==NULL)?1:0)就是说如果str1[0]==NULL(也就是str1[0]为空)成立的话就输出1,否则输出0

后边的都一样,以此类推。

char str1[5] = \"abcf\";系统只给str1分配5个字符空间,分别存放\'a\',\'b\',\'c\',\'f\'和\'\\0\',因为\'\\0‘的ASCII值是0,而NULL也是0,所以前4个显示语句输出1,而第5个语句输出0。要说明的是,访问数组不要越界,也就是说,对于数组str1来说,只有连续5个字节为其所有,接下来的str1[5],......,str1[11]都不属于str1,也许这些字节已被系统分配给程序的变量,也许未被使用,但无论如何,我们都不应该越界,否则造成的麻烦是很难发现的。

subscriptable是什么意思

subscriptable:可下标。

下标访问越界(C 语言:char *s。s[n]是否为空的问题

中古英语始于11世纪末,诺曼征服英格兰;1476年,威廉・卡克斯顿将印刷机介绍给英国,并开始在伦敦出版第一本印刷书籍,扩大了英语的影响力。

自17世纪以来,现代英语在英国和美国的广泛影响下在世界各地传播。通过各类这些国家的印刷和电子媒体,英语已成为国际主导语言之一,在许多地区和专业的环境下的语言也有主导地位,例如科学、导航和法律。

国际语言:

英语在许多国际组织或者会议上都是必需语言,联合国秘书长的当选条件之一,是同时掌握英语和法语。

由于讲英语的两个主要国家――英国与美国,先后成为世界大国之故,并在商业、学术领域具较大影响力,在科技方面的突出贡献和领先地位,因此许多人都将英语做为一种外语或第二语言,把英语作为外国语使用的人约3亿―5亿。

可下标访问的就是可以使用“下标”来访问数据,通常在python里,下标变量越界或者对象不支持下标括号访问的,就会报错,比如(python代码示例)a = 8print(a[0])报错:TypeError: \'int\' object is not subscriptable

c语言程序 调错 运行出负数

long int x1,x2,x4,x6,x10,x;

int i;

long int a[10];

i=1;

while(i<=10)

{

scanf(\"%d\",&a[i]);

改为float int x1,x2,x4,x6,x10,x;

int i;

float a[10];

i=1;

while(i<=10)

{

scanf(\"%f\",&a[i]);

就可以了,调试过,已经通过,运行正常

补充:刚才看了楼下day9981 的回答,首先我同意他说的应该说用long int也没有关系,但是我不同意他所说的问题出现在下标越界一说。不信的话你可以在scanf语句下面紧跟着加一句printf(\"%d\",a[i]);让程序把你刚刚输入存入数组的每一个元素都输出来看看?你会发现输出的每个数都不是你输入的数。这应该不是越界造成的吧。

至于为什么long int从理论上讲是可以的,但是这段程序中不行,要改成float才行,我水平有限解释不来了,请高手作答!

第二次补充:

刚才又进行了调试,发现原来是这么低级的一个错误,就是scanf语句中的格式符应该改为%ld而不是%d,还有下标越界也是要改的

最后给一段修改好的吧:

void main()

{

long int x1,x2,x4,x6,x10,x;

int i;

long int a[10];

i=0; (原来是i=0)

while(i<=9) (原来是i<=10)

{

scanf(\"%ld\",&a[i]);(原来是%d)

i++;

}

x1=100000*0.1;

x2=x1+100000*0.075;

x4=x2+200000*0.05;

x6=x4+200000*0.03;

x10=x6+400000*0.015;

for(i=0;i<=9;i++)

{

if(a[i]<=100000)

x=a[i]*0.1;

else if(a[i]<=200000)

x=x1+(a[i]-100000)*0.075;

else if(a[i]<=400000)

x=x2+(a[i]-200000)*0.05;

else if(a[i]<=600000)

x=x4+(a[i]-400000)*0.03;

else if(a[i]<=1000000)

x=x6+(a[i]-600000)*0.015;

else

x=x10+(a[i]-1000000)*0.01;

printf(\"x=%ld\\n\",x);

}

}

void main() { long int x1,x2,x4,x6,x10,x; long int m; printf(\"please input this month\'s profit:\\n\"); scanf(\"%ld\",&m); x1=100000*0.1; x2=x1+100000*0.075; x4=x2+200000*0.05; x6=x4+200000*0.03; x10=x6+400000*0.015; if(m<=100000) x=m*0.1; else if(m<=200000) x=x1+(m-100000)*0.075; else if(m<=400000) x=x2+(m-200000)*0.05; else if(m<=600000) x=x4+(m-400000)*0.03; else if(m<=1000000) x=x6+(m-600000)*0.015; else x=x10+(m-1000000)*0.01; printf(\"x=%ld\\n\",x); getchar(); getchar(); }