Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays C:接收地址作为输入并为地址分配数组值时出现分段错误_Arrays_C_Pointers_Byte - Fatal编程技术网

Arrays C:接收地址作为输入并为地址分配数组值时出现分段错误

Arrays C:接收地址作为输入并为地址分配数组值时出现分段错误,arrays,c,pointers,byte,Arrays,C,Pointers,Byte,问题:编写一个程序将数据从4字节变量复制到数组,反之亦然。(输入:整数和数组起始地址) 我必须接收一个整数作为输入,并将其存储在一个4字节的变量中。 还必须接收阵列地址作为输入 然后将整数值存储在数组中,打印结果,并执行相反的操作 我尝试了以下代码 #include <stdio.h> int main() { int num,arr[]={0}; int *ptr=NULL; scanf("%d%p",&num,&ptr

问题:编写一个程序将数据从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;
}
#包括
int main()
{
int num,arr[]={0};
int*ptr=NULL;
scanf(“%d%p”,&num,&ptr);
arr[0]=num;
*ptr=num;
printf(“%p”,ptr);
返回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;
}
#包括
#包括
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);
免费(ptr);
返回0;
}
  • 您需要为阵列设置一个大小
  • 无法为参数选择某个地址
代码如下:

    #include <stdio.h>

    int main()
    {
        int num, arr[1] = { 0 };
        scanf("%d", &num);
        arr[0] = num;
        printf("%p", &arr[0]);
        return 0;
    }
#包括
int main()
{
int num,arr[1]={0};
scanf(“%d”和&num);
arr[0]=num;
printf(“%p”、&arr[0]);
返回0;
}

您无法选择要写入的地址-该地址必须是允许程序写入的有效地址。除了前面的评论:您试图实现的目标非常不清楚。此外,在现代受保护的操作系统上,进程(正在运行的程序)无法写入它不拥有的地址,这可能是一个错误。你不能仅仅给出一个任意的地址作为输入,并希望它在某种程度上是有效的。我已经用我被问到的实际问题更新了这个问题。我认为“数组开始地址”的真正含义是“数组开始索引”。如果您收到老师的作业,请作为老师澄清。