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/