我正在编写一些作业(101级)。当我试图编译代码时,我从bit defender收到了一些病毒警报:
#include <stdio.h>
int main ( void ) {
int numbers [10];
int i, temp;
for (i = 1; i <= 10; ++i)
numbers[i] = 0;
printf("Enter up to 10 integers. input '-1' to finish \n");
for (i = 0; i < 10; i++) {
scanf("%d", &temp);
if (temp == -1) {
break;
} else {
numbers [i] = temp - 1;
}
}
for (i = 1; i <= 10; ++i)
printf("the numbers are: %d\n", numbers[i]);
return 0;
}

我认为问题出在这段代码上:
for (i = 1; i <= 10; ++i)
numbers[i] = 0;为什么会发出木马病毒警报?我做错什么了?
发布于 2012-11-18 05:34:14
不要注意一些杀毒程序会将编译的项目识别为病毒,它和visual studio做同样的事情,只是在你的杀毒列表中添加例外。但是你的代码确实有一些问题。
for (i = 1; i <= 10; ++i)是不正确的,因为C中的数组从0开始,第二,为了初始化不需要对循环执行的变量,您可以像任何其他variable.numbers [i] = temp - 1一样为它们赋值,但在数组中存储值的方式并不是很好,因为当您执行-1操作时,您会更改输入值。一个
/*For the array initialization.*/
int numbers[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };/*For inputing the values.*/
for ( i = 0; i < 10; i++ ){
scanf( "%d", &temp );
if( temp == -1 ){
numbers[ i ] = -1;
break;
else{
numbers[ i ] = temp;
}
}/*For the printing. */
for( i = 0; i < 10 ; i++ ){
if( numbers[ i ] == -1 ){
break;
}
printf( "numbers[%d] is %d", i, numbers[ i ] );
}发布于 2012-11-18 05:34:07
你触发了一个缓冲区溢出。你的数组“numbers”是10个项目,你访问的是第11个项目。
发布于 2012-11-18 05:34:42
使用i=0而不是i =1,因为在C数组中,索引从0开始
数组的大小是10,所以最后一个索引是9,所以您要访问的数组索引在numbers[10]中是越界的,所以它是undefined behaviour
数组将如下所示:
numbers[0] ,numbers[1], . . . numbers[9]
将代码修改为:
for(i=0;i<10;i++)
printf("%d\t",numbers[i]);https://stackoverflow.com/questions/13434977
复制相似问题