6

私はいくつかの宿題(101レベル)をコーディングしていました。コードをコンパイルしようとすると、ビットディフェンダーからウイルスアラートが届きました。

#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;

なぜトロイの木馬ウイルスが警告するのですか?私は何をしましたか?

4

3 に答える 3

6

一部のウイルス対策プログラムは、コンパイルされたアイテムをウイルスとして認識します。VisualStudioでも同じように動作し、ウイルス対策リストに例外を追加するだけです。しかし、あなたのコードには確かにいくつかの問題があります。

  • for (i = 1; i <= 10; ++i)Cの配列は0から始まり、2番目に変数を初期化するためにループに対して行う必要がないため、他の変数と同じように値を割り当てることができます。
  • 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 ] );
}
于 2012-11-17T21:34:14.383 に答える
4

バッファオーバーフローをトリガーします。配列'numbers'は10アイテムの大きさで、11番目のアイテムにアクセスします。

于 2012-11-17T21:34:06.807 に答える
4

C 配列のインデックスは at で始まるため、i=0代わりに使用します。i =10

配列のサイズは 10 なので、最後の9 インデックスnumbers[10]undefined behaviour

配列は次のようになります。

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

コードを次のように変更します。

for(i=0;i<10;i++)
  printf("%d\t",numbers[i]);
于 2012-11-17T21:34:41.653 に答える