我有一个名为fun(int num, int * array);
的函数,它以int
和int array
作为其句柄。我正在尝试将int
转换为数组。
当我运行程序时,我没有正确显示数组
int fun(int num, int*array) {
int count =0;
while(num>0) {
num/= 10;
count++;
}
array[count];
// for loop works
}
当我在程序中打印数组时,即每次运行程序时,我都会得到随机数字。
答案 0 :(得分:1)
这条线应该做什么?
array[count];
由于你的有趣函数中的整数数组会发生变化,你必须分配内存(使用malloc,realloc,...)。
编辑:加号,当您计算“num”中有多少位数时,您已经将值保持为“num”。 复制“num”!
编辑2:我看你的功能越多,你使用它就越有问题。
Fisrt,你想将你的整数分解为一个int数组。 好的,但是整数有范围,因此整数具有最大数字。 根据我的记忆,64位整数有20位数。 所以你可以简单地使用“int array [NB_DIGIT_INT_MAX];”用“#define NB_DIGIT_INT_MAX 21”。 因此,分配不是必需的并且会增加代码的复杂性(调用者必须在函数调用后释放)。
其次,你的有趣功能并没有说明有多少个案会保存你的整数。 假设num = 12,你的数组将有“array [0] = 1,array [1] = 2”,但你怎么知道在哪里停止? 如果num = 2345,你怎么知道你的数组中只有4个第一个案例是合法的? 有两种方法:你有另一个变量来保存数组的实际大小,或者你的数组中有一个特殊值,它表示“它就是结束”(就像用作字符串的char数组的'\ 0')。 / p>
您可以使用“-1”。
让我们试一试,如果事情不清楚(英语不是我的母语),请不要犹豫提问。
答案 1 :(得分:0)
您的数组甚至没有分配,这不能按预期工作。你很幸运没有分段错误。如果要向数组添加整数以使其增长,则需要分配更大的数组,复制值并将新的数组添加到新数组并删除前一个数组,并将array
变量保留为指针到新阵列。此外,您需要将实际数组的大小作为fun
的参数传递。
答案 2 :(得分:0)
count
变量可以是全局变量,在所有函数之外初始化它
short count;
整个程序可以修改如下
#include<stdio.h>
#include<stdlib.h>
short count;
void fun(int num, int **ptr) {
// You need a pointer to a pointer and return type can be void
int num_copy=num;
count=0; // Setting the count to zero
while(num_copy>0) {
num_copy/= 10; // Don't modify the original number
count++;
}
//Allocate enough memory to store the digits
*ptr=malloc(count*sizeof **ptr);
if(NULL==*ptr){
perror("Can't allocate memory");
exit(1);
}
// Then do the loop part with original num
for(int i=count -1; i>=0; i--) {
(*ptr)[i] = num%10;
num /= 10;
}
// By now you have an array 'array' of integers which you could print in main.
}
int main()
{
int number = 123456789;
int *array;
fun(number,&array); // &array is of type pointer to a pointer to integers
//Now print the individual digits
printf("Individual digits are : \n");
for(int i=count-1;i>=0;i--)
printf("%d\n",array[i]);
}
答案 3 :(得分:0)
在我看来,你正在从一个整数转换为数字。但是我没有看到你的代码在哪里写入数组。
如果在此之前未初始化数组,那么这将解释为什么它仍然包含随机值。