我使用的是Borland C v3.1(DOS版)
这是我的代码
#include<stdio.h>
#include<conio.h>
void WTF()
{
int array[15],i;
int WTF_NUMBER=12345;
for(i=0;i<16;i++) array[i]=0;
printf("%d",WTF_NUMBER);
}
void main()
{
clrscr();
WTF();
getch();
}
我应该得到12345作为输出,但我得到0而不是。帮助
答案 0 :(得分:3)
你定义了数组&#34;数组&#34;因为只有15个元素。
int array[15],i;
但是在定义下面的循环中,您尝试初始化16个元素,这些元素是包含索引0到15的元素。
for(i=0;i<16;i++) array[i]=0;
所以这个循环覆盖,变量WTF_NUMBER占用的内存是数组[15]占用与WTF_NUMBER相同的内存。
像
一样写循环for (i=0; i < 15; i++ ) array[i]=0;
或者你可以简单地将数组定义为
int array[15] = { 0 };
在这种情况下,数组的所有元素都将被初始化为0。
将数组初始化为零的另一种方法是使用标准函数memset
memset( array, 0, 15 * sizeof( int ) );
或
memset( array, 0, sizeof( array ) );
答案 1 :(得分:1)
您的代码不正确。
而不是
for(i=0;i<16;i++) array[i]=0;
for(i=0;i<15;i++) array[i]=0;
因为你的数组只有15个元素。
答案 2 :(得分:0)
for
循环中超出了数组边界。因此将其设为for(i=0;i<15;i++)
答案 3 :(得分:0)
array
可以容纳15个元素0-14应该是你的数组索引。
访问array[15]
超出范围。
答案 4 :(得分:0)
你的外观大小错误,数组有15个元素,循环循环16次,它会覆盖数组的末尾并进入计数器。
答案 5 :(得分:0)
由于数组大小无效,程序将崩溃;在for循环中将其更改为15,您将获得所需的输出。
答案 6 :(得分:0)
而不是使用for循环
尝试像这样初始化你的数组
int array[15] = {0};
我想你会得到你想要的输出。
答案 7 :(得分:0)
您可以通过明智地使用标准库来解决几个问题。您根本不需要在显式循环中执行此操作:
int array[15];
memset (array, 0 , sizeof (array));
答案 8 :(得分:0)
由于for循环中的数组大小错误,WHAT-Number的值被覆盖。