C语言数组问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言数组问题?相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
int main(void)
char a[]=0;
char *b;
b=&a[0];
scanf("%c%c%c",b,b+1,b+2);
printf("%c%c%c",*b,*(b+1),*(b+2));
scanf("%c%c%c",b+5,b+6,b+7);
printf("%c%c%c",*b,*(b+1),*(b+2));
printf("%c%c%c",*(b+5),*(b+6),*(b+7));
getchar();
getchar();
return 0;
这个为什么不能运行?
放第二次输入时,就会出现问题!
通过阅读您的程序,我想出现错误的原因应该在char a[]=0这句话,因为没有确定数组的长度,所以只能根据后面赋值的数据个数决定数组长度,但是恰好又只赋值了一个数,那么系统就会认定这个数组的长度为1。那么在后面将a[0]的地址赋值给指针变量b,因为a数组只有一个长度,所以后面的b+1,b+2…等等就是不确定的值,所以程序就会出错。 参考技术A
图中红色框内数组声明只有一个元素,也就是说数组大小是1,后面输入3个元素放哪里,放到不是数组的内存里那肯定会失败。
改成char a[10]=0;
注意这样也是只能放10个元素。想要更多改数字。
如果只能放一个数字,那么我为什可以放123三个字符?
追答你可以使用sizeof(a)看看它多大。你问的这个问题,是因为在c.语言里就算越界也不一定会崩溃,有可能你占用的还是你这个程序的内存空间或者系统没有强制保护的内存,所以给你的错觉是好像也可以用。如果占用保护的就会程序崩溃。
以上是关于C语言数组问题?的主要内容,如果未能解决你的问题,请参考以下文章