Struct 有人能告诉我为什么我的扫描不是';不行吗?

Struct 有人能告诉我为什么我的扫描不是';不行吗?,struct,scanf,Struct,Scanf,我不熟悉结构和指针,我看不出这段代码有什么问题: struct { int id; char* name; } cap[50]; void xep() { int i, n; scanf("%d", &n); for (i = 0; i < n; i++) { cap[i].id = i; scanf("%c", cap[i].name); printf("%d %s\n", cap[i].i

我不熟悉结构和指针,我看不出这段代码有什么问题:

struct {
    int id;
    char* name;
} cap[50];

void xep() {
    int i, n;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        cap[i].id = i;
        scanf("%c", cap[i].name);
        printf("%d %s\n", cap[i].id, cap[i].name);
    }
}

好像它忽略了我在n之后输入的所有内容。有什么想法吗?

char*name是一个指针,但您尚未为其分配任何内存。要么给它一个固定大小的字符名[100],要么分配一些内存。
您的scanf仅获得1个字符,您可能需要%s(字符串)而不是%c(字符)

scanf(“%c”,cap[i].name)->
scanf(“%s”,cap[i].name)
字符*名称->
字符名[30]
(最大名称长度为29。是否有任何方法可以动态分配内存,以便我只拥有所需的内存?是的,有:
malloc
我如何精确地分配字符串所需的内存?*name=malloc(1*sizeof(char)),在结构中;之后是什么?是时候执行一些搜索@AnttiDegl.)如果您确实只需要1个字符,请初始化一个数组。如果希望每个名称的长度完全正确,则必须首先扫描到允许的最大长度的字符数组中,然后是strcpy(在malloc之后)
    0 (null)
    1 (null)
    2 (null)