-2

ある配列から別の配列に 10 個の整数をコピーすることを目的としたプログラムがあります。エラーなしでコンパイルされています。次のようになります。

/* Program to copy a string from one array to another array and print the second array */
#include<stdio.h>
#include<conio.h>
#define MAX 10
void main()
{
    int s[MAX]; // Original array
    int c[MAX]; // Array which contains the copied contents of s[MAX]
    int i;
    printf("Enter the string of 10 characters");
    for(i=0;i<MAX;i++)  // Storing elements in the original array
    {
        scanf("%d",s[i]);
    }
    for(i=0;i<MAX;i++)
    {
        printf("%d",s[i]);
    }
    printf("\n");
    for(i=0;i<MAX;i++)  /*Copying the elements from the original array into the duplicate array*/
    {
        c[i]=s[i];
    }
    for(i=0;i<MAX;i++) //Printing the duplicate array
    {
        printf("%d",c[i]);
    }
}

元の配列を印刷することすらありません。プログラムの後半部分である複製配列は言うまでもありません。

4

4 に答える 4

6

これscanf("%d",s[i]);は読むべきですscanf("%d",&s[i]);

于 2013-01-01T13:55:54.740 に答える
4

でを忘れてい&ましたscanf。コードは次のとおりscanf("%d",&s[i]);です。なんで?値を変更する変数のアドレスを関数に渡すだけです。ポインターがないと、関数は値を変更できません。

例:

int function1(int a) {
    a = 10;
}

int function2(int* a) {
    *a = 20;
}

(...)
int a = 5;
function1(a);
printf("%d\n", a); /* a is still 5 */
function2(&a);
printf("%d\n", a); /* a is now 20 */
于 2013-01-01T13:56:25.820 に答える
2

この関数scanfは、整数へのポインターをパラメーターとして想定しています。s[i]は、配列 s のインデックス i にある整数の値をポインタではなく返すため、scanfスキャンした値を無効なメモリ位置に格納しようとして、プログラムがクラッシュします。

ポインター&s[i]を提供するために代わりに使用します。scanf

于 2013-01-01T14:13:54.027 に答える
2

&中に演算子を使用する必要がありますscanf

scanf("%d",&s[i]);
于 2013-01-01T13:57:14.380 に答える