【发布时间】:2022-01-03 23:36:13
【问题描述】:
正如我的标题所暗示的,我是一个正在玩数组的初学者。尽管我尽力而为,但我无法正确更改数组中的值?如您所见,数组中只有后5位正确,前3位不正确?为什么会这样?我将在下面发布我的代码,以便大家明白我的意思:
#include <stdio.h>
#include <stdlib.h>
#define MAX_ARRAY 8
void input_array(char anumber[MAX_ARRAY])
{
printf("\n\nPlease insert new data to the 1st array with value 5: ");
fgets(&anumber[0], MAX_ARRAY, stdin);
long ret = strtol(&anumber[0], NULL, 10); // Converts char to int
printf("Converting char anumber = %d to int ret = %d\n", anumber[0], ret);
printf("\n(Array after): ");
for (int i = 0; i < MAX_ARRAY; ++i)
{
printf("(%d) ", anumber[i]);
}
}
int main(void)
{
char arr[MAX_ARRAY] = {5, 8, 2, 9, 1, 7, 4, 3};
printf("(Array before): ");
for (int i = 0; i < MAX_ARRAY; ++i)
{
printf("(%d) ", arr[i]);
}
input_array(arr); // Function that lets the user change value of "5" inside the array
return 0;
}
如果我作为用户输入值“3”,此代码的输出是:
(Array before): (5) (8) (2) (9) (1) (7) (4) (3)
Please insert new data to the 1st array with value 5: 3
Converting char anumber = 51 to int ret = 3
(Array after): (51) (10) (0) (9) (1) (7) (4) (3)
【问题讨论】:
-
您试图在同一个变量中包含一个字符串(一个以 null 结尾的字符数组)和一个类型为
char的元素的数值数组。只是不要那样做。使用单独的变量。 -
旁注:不用写
&anumber[0],你可以写anumber。这两个表达式是等价的。
标签: arrays c function pointers fgets