c - 结构的扫描使程序崩溃

标签 c pointers struct crash

这是代码。函数“leggi”应该读取 c[i].a 的值,但是当我在控制台中键入第一个数字时,程序崩溃了。 这可能是一个指针问题,但我无法弄清楚

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

typedef struct cane{
    int a;
}cane;

void leggi(cane *c[20]){
    int i;
    for(i=0;i<5;i++)
        scanf("%d", &c[i]->a );
}

int main(){
    int i;
    cane c[20];

    leggi(&c);

    for(i=0;i<5;i++)
        printf("%d",c[i].a);

    return 0;
}

最佳答案

您向函数传递了错误的类型。

如果你想将数组传递给函数,数组名称会衰减为指向其第一个元素的指针,因此参数只是指向该类型的指针:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

typedef struct cane{
    int a;
}cane;

void leggi(cane *c){
    int i;
    for(i=0;i<5;i++)
        scanf("%d", &(c[i].a) );
}

int main(){
    int i;
    cane c[20];

    leggi(c);

    for(i=0;i<5;i++)
        printf("%d",c[i].a);

    return 0;
}

关于c - 结构的扫描使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53193516/

相关文章:

c - 如何释放返回的 malloced 字符串?

c++ - 为什么这个数组的第 0 个索引仍然不等于 0?

c - 如何删除用户在 c 中选择的二维数组的 N 行和列数

c++ - 这个小程序是如何工作的?

c# - 通过结构指针将结构数组从 C# 传递到 C

c - (null) 在打印字符串时正在打印

c - 使用 C 中的回调注册事件

c - 哪个结构用于从 REG_FULL_RESOURCE_DESCRIPTOR 类型的注册表值数据中提取信息?

c++ - 我们还需要做静态分析吗?

c - 使用结构体指针的两个函数(读取和显示数组)