C homework-троянец найден при компиляции кода

Я кодировал некоторые домашние задания (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: %dn", numbers[i]);

return 0;
}

virus alert print screen

Я считаю, что проблема с этот кусок кода:

    for (i = 1; i <= 10; ++i)
        numbers[i] = 0;

почему предупреждение о троянском вирусе? что я сделал?

3 ответов


Не обращайте внимания некоторые антивирусные программы распознают скомпилированные элементы как вирус, он делает то же самое avast с visual studio, просто добавьте исключение в свой список антивирусов. Но у вашего кода действительно есть некоторые проблемы.

  • for (i = 1; i <= 10; ++i) неверно, потому что массивы в C начинаются с 0, а во-вторых, чтобы инициализировать переменные, которые вам не нужно делать для циклов, вы можете назначить им значения, как и любой другой переменной.
  • numbers [i] = temp - 1 способ хранения значений в массиве не является так хорошо, потому что вы изменяете введенные значения, когда вы делаете -1.

a

/*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 ] );
}

вы запускаете переполнение буфера. Ваш массив "numbers" - это 10 элементов, вы получаете доступ к 11-му элементу.


использовать i=0 вместо i =1 потому что в с ++ индексы массивов начинаются с 0

размер массива равен 10, поэтому последний индекс равен 9 Таким образом, вы получаете доступ к индексу массива, который не связан в numbers[10], так что undefined behaviour

массив будет выглядеть так :

numbers[0] ,numbers[1], . . . numbers[9]

изменить код следующим образом:

for(i=0;i<10;i++)
  printf("%d\t",numbers[i]);