从用户定义的数组长度存储数组值

时间:2013-09-23 02:57:46

标签: c arrays scanf

基本上,我试图编写一个简单的C函数,提示用户输入数组长度,然后要求用户输入数组的值(int)。

所需的样本输出:

Enter Array Length: 5
Enter values for the array:
1 2 3 6 7

The current array is:
1 2 3 6 7

这是我目前的代码。我觉得这应该有效,但是如果有了C的基本知识,就会导致分段错误。

int intersect()
{
  int size, index, input;
  printf("Enter the size of the arrays:\n");
  scanf("%d", &size);

  int arr1[size], arr2[size];
  index = 0;
  printf("Enter the elements of the first array:\n");
  while (index < sizeof(arr1))
    {
      scanf("%d ", &input);
      arr1[index] = input;
      index = index + 1;
    }

  printf("The current array is:\n %d", arr1);
}

我不了解如何收集用户定义的长度数组的输入。任何解释都表示赞赏!

1 个答案:

答案 0 :(得分:6)

sizeof 返回以字节为单位的内存,而不是数组长度。所以基本上你要检查索引是否小于40size of Integer * array length)。由于数组没有空间来存储40个整数值,因此它给出了未定义的行为(一些时间分段错误)。

您应该改为

while (index < sizeof(arr1))

while (index < size)

第二个也是正确的:

printf("The current array is:\n %d", arr1);
//                               ^    ^  address             

as

for (i = 0; i < size, i++)  
  printf("The current array is:\n %d", arr1[i]);

要么打印地址使用%p