c - 将数组传递给函数并显示元素时出错?

标签 c arrays linux function parameter-passing

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*/
}

最佳答案

您的程序中有几个问题。最明显的是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) 只会给出整数指针的大小。您需要找到的元素数量,应将其作为第二个参数传递给函数。

关于c - 将数组传递给函数并显示元素时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58945024/

相关文章:

c - read() 返回正值,但 recvline 中没有任何内容

c - 如何在 Windows 上安装 GTK+ 3.0?

C函数指针赋值

arrays - 使用复选框和 AngularJS 过滤 ng-repeat 列表

c - Python调用C语言时,返回值异常

python - 如何更改 numpy 中 order = 'F' 的数组条目

ios - 从列表中选择随机数量的项目并将它们添加到另一个列表(Swift)

linux - 有没有办法在 Glib v2.32+ 中设置线程优先级?

java - UnknownHostException 访问 virtualBox 上的服务

php - 在网页上使用 Kerberos 进行 SSO