C:接收地址作为输入并将一个数组值分配给该地址时出现分段错误

问题描述

问题:编写一个程序以将数据从4字节变量复制到数组,反之亦然。 (输入:整数和数组起始地址)

我必须接收一个整数作为输入并将其存储在4字节变量中。 还必须接收数组地址作为输入。

然后将整数值存储在数组中并打印结果,并对它进行相反的处理。

我尝试了以下代码

#include <stdio.h>

int main()
{
    int num,arr[]={0};
    int *ptr=NULL;
    scanf("%d%p",&num,&ptr);
    
    arr[0]=num;
    *ptr=num;
    
    printf("%p",ptr);

    return 0;
}

但是存在分段错误(核心转储)错误代码有什么问题?

解决方法

您可以使用malloc获得有效地址。在这种情况下,我为您的示例分配了一个int大小,打印有效地址,然后可以使用scanf放置该地址。

#include <stdio.h>
#include <malloc.h>

int main()
{
    int num,arr[]={0};
    int *ptr=NULL;
    int *p = (int*)malloc(sizeof(int));
    printf("p: %p\n",p);
    scanf("%d%p",&num,&ptr);
    
    arr[0]=num;
    *ptr=num;
    
    printf("%d",*ptr);
    free(ptr);

    return 0;
}
,
  • 您需要为阵列设置大小。
  • 您无法为参数选择一些地址。

代码如下:

    #include <stdio.h>

    int main()
    {
        int num,arr[1] = { 0 };
        scanf("%d",&num);
        arr[0] = num;
        printf("%p",&arr[0]);
        return 0;
    }