在C中返回malloc

时间:2015-05-05 14:44:19

标签: c malloc

int* dec2bin(int y){
    int *arr = (int*)malloc(sizeof(int)*5);
    int i;

    for (i=0; i<5; i++) arr[i]=0;

    return arr;
}

这是函数dec2bin的一部分 在此代码中,我将arr[0]设为arr[4]全部为0 但是此函数返回值1070192。我想返回00000 我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:5)

您很可能正在打印malloc()返回的地址。

您需要一个循环来打印内容,例如

int *dec2bin(int size)
{
    return calloc(size, sizeof(int));
}

int main(void)
{
    int *data;
    int  index; 
    int  size;

    size = 5;
    data = dec2bin(size);
    if (data == NULL)
        return -1; /* allocation error */
    for (index = 0 ; index < size ; index++)
        printf("%d", data[index]);
    printf("\n");
    free(data);

    return 0;
}

您可以看到我使用了calloc(),因为您要将所有值初始化为0,否则请使用malloc()

答案 1 :(得分:1)

该函数返回指向已分配内存的指针

int* dec2bin(int y){
    int *arr = (int*)malloc(sizeof(int)*5);
    int i;

    for (i=0; i<5; i++) arr[i]=0;

    return arr;
}

表示5个整数的数组。除非分配失败,否则其地址可能不等于0。但整数本身等于0。

如果您将以下列方式编写呼叫(不清楚参数的含义)

int *p = dec2bin( 0 );

然后* p,数组的第一个元素,确实等于0

甚至你可以写

int *p = dec2bin( 0 );

for ( int i = 0; i < 5; i++ ) printf( "%i ", p[i] );

你将得到数组的所有元素都等于0。

答案 2 :(得分:0)

如果您希望将该数组的值作为字符串(字符数组)获取,则下面是您可以开始的代码。

char* dec2bin(int y) {
    int *arr = (int *) malloc(sizeof(int) * 5);
    char output[50];
    int i;

    for (i=0; i<5; i++) arr[i] = 0;
    sprintf(output, "%d%d%d%d%d", arr[0], arr[1], arr[2], arr[3], arr[4]);

    return output;
}

要打印出来,您可以使用:

char *string = dec2bin(0);
printf("%s", string);