C 将int的每个数字分配给int数组

C 将int的每个数字分配给int数组,c,arrays,scanf,C,Arrays,Scanf,是否可以使用scanf检索整数并将每个数字分配给int数组 我正试图通过以下方式实现这一目标: int numbers[]; puts("Enter number"); int x; scanf("%d",x); numbers = malloc(x); numbers = x; 您可以将其作为字符串%s读入字符数组 在这一点上,每个数字都是一个字符 char只是一个int值。因此,您可以对读入的字符应用此后的任何转换 您可以将每个字符数字转换为其int值,然后对字符串中的每个字符进行迭代,并

是否可以使用scanf检索整数并将每个数字分配给int数组

我正试图通过以下方式实现这一目标:

int numbers[];
puts("Enter number");
int x;
scanf("%d",x);
numbers = malloc(x);
numbers = x;

您可以将其作为字符串%s读入字符数组

在这一点上,每个数字都是一个字符

char只是一个int值。因此,您可以对读入的字符应用此后的任何转换

您可以将每个字符数字转换为其int值,然后对字符串中的每个字符进行迭代,并执行如下操作:

myInts[i] = charBuffer[i] - '0'; /* where i = 0.. string length -1 */

不像那样神奇,您需要自己读取int并分解数字,或者将其作为字符串读取,这样您就可以单独访问每个字符

其他人对您想要的都有很好的答案,只是想指出您的代码真正在做什么---

在这里,您已经读入了用户的输入,并在堆上分配了一个x字节数组。数字指向那个记忆。这是你到达那个阵列的唯一方法

numbers = x;

然后给整数x赋值。您现在已经失去了对malloc分配的内存的跟踪,无法使用free()删除它。

两个快速技巧:

整数到字符串:

int N;
char buf[10];
scanf("%d",&N);
sprintf(buf,"%d",N);
整数到数组:

int N,i,
    buf[10],
    Dig;
scanf("%d",&N);
Dig = log10(N);
for(i = Dig; N ; i--){
   buf[i] = N % 10;
   N /= 10;
}

你是说你想输入一个整数并将其转换成字符串吗?编译器需要专门捕捉人们将int而不是int*传递给scanf的情况,并输出“不,你不想这样做。糟糕”——似乎每次有人使用scanf时,他们都会犯这个错误。它应该是
scanf(“%d”和&x)
或者您将尝试向任何内存位置写入int
x
我猜OP的问题之一是确定要分配的内存量。
int N,i,
    buf[10],
    Dig;
scanf("%d",&N);
Dig = log10(N);
for(i = Dig; N ; i--){
   buf[i] = N % 10;
   N /= 10;
}