【问题标题】:Error passing array to function and displaying elements?将数组传递给函数和显示元素时出错?
【发布时间】:2020-03-15 14:53:50
【问题描述】:

C 语言 - Linux

我的程序上下文:读取用户输入的参数,满足要求后将参数传递给数组,并将数组传递给函数。该函数必须显示数组元素。出于某种原因,输出显示的是随机大数字,例如“-914536439”,这是错误的。

用户输入示例:./file 3 2 5 10 6
当前输出:数组元素为 0 0 0 -914536439 .. -914536430(错误!)
期望的输出:显示给定的数组元素,“当前数组元素是:3 5 10 6”

我认为我的 void 函数在某处出错了。我该如何解决这个问题,以便函数显示数组元素?

我的代码:

/* function to display element of modified array */
void function(int *arr)
{
   int j, size;
   size = sizeof(arr)/sizeof(arr[0]);

   printf("Current array elements are:");
   for (j=0; j < size; j++)
   {
      /* display array elements */
      printf("%d ", arr[j]);
   }
}

int main (int argc, int *argv[])
{ 
   /* max array size is 100 */
   int arr[100];

   for (int i=0; i<argc; i++)
   {
       /*check if value of arguments is greater than value of argv[1] */
       if (argv[i] > argv [1])
       {
          /* pass value of argument(s) to array named arr */
          arr[i] = argv[i];    
       }    
   }
   /* pass array arr to function */
   function(arr);

   /*other code*/
}

【问题讨论】:

    标签: c arrays linux function parameter-passing


    【解决方案1】:

    您的程序中有几个问题。最明显的是 argv 是一个 char **。但是您将 argv[i](即 char *)分配给 arr[i](即 int)。您的编译器可能会就此发出警告。在这种情况下,要将 char* 转换为 int,您可以使用 atoi()。 您还想为 arr 使用不同的索引而不是 i。只有当你发现一个比第一个更大的数组元素时才增加它。

    if (atoi(argv[i]) > atoi(argv [1]))
    {
        /* pass value of argument(s) to array named arr */
        arr[j] = atoi(argv[i]);    
        j++;
    } 
    

    另一个问题是,你的函数中的 sizeof(arr) 只会给你一个整数指针的大小。您想要找到的元素数量,您应该将其作为第二个参数传递给函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      相关资源
      最近更新 更多