初始化结构中的字符串时出现错误

问题描述 投票:0回答:1

我想用它的每个字符''来初始化一个字符串。(因为稍后我将使用gets(),第一个字符不是''也可以。)
所以我用“a”来分配字符串。
这是我的代码:

typedef struct node
{
    char name[12] = "a"; 
    struct node* next;
    struct node* prev;
    struct node* lead;

} node;

但是,
如果我把

char name[12] = "a";
改成
char name[12];
就可以了,
如果我不改变,它会给出错误消息:
C:\UsersDesktop\exp1-2\main.c|7|error: expected ':', ',', ';', '}' or '__attribute__' before '=' token|
C:\Users\Desktop\exp1-2\main.c|25|error: 'node' {aka 'struct node'} has no member named 'name'|

提前谢谢您!

上面显示了我的部分代码,如果你想看完整的代码,HRER 是我的完整代码:

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

typedef struct node
{
    char name[12] = "a";
    struct node* next;
    struct node* prev;
    struct node* lead;

} node;

node* init()
{
    node* huzong = (node*)malloc(sizeof(node));
    node* wangzong = (node*)malloc(sizeof(node));
    node* zhangzong = (node*)malloc(sizeof(node));
    node* lizong = (node*)malloc(sizeof(node));
    node* zhangsan = (node*)malloc(sizeof(node));
    node* lisi = (node*)malloc(sizeof(node));
    node* laoliu = (node*)malloc(sizeof(node));
    node* xiaopeng = (node*)malloc(sizeof(node));
    node* xiaochen = (node*)malloc(sizeof(node));
    strcpy(huzong->name, "胡总");
    huzong->lead = NULL;
    huzong->prev = NULL;
    huzong->next = wangzong;
    strcpy(huzong->name, "王总");
    wangzong->lead = zhangsan;
    wangzong->prev = huzong;
    wangzong->next = zhangzong;
    strcpy(huzong->name, "张总");
    zhangzong->lead = NULL;
    zhangzong->prev = wangzong;
    zhangzong->next = lizong;
    strcpy(huzong->name, "黎总");
    lizong->lead = NULL;
    lizong->prev = zhangzong;
    lizong->next = NULL;
    strcpy(huzong->name, "张三");
    zhangsan->lead = NULL;
    zhangsan->prev = NULL;
    zhangsan->next = lisi;
    strcpy(huzong->name, "李四");
    lisi->lead = xiaopeng;
    lisi->prev = zhangsan;
    lisi->next = laoliu;
    strcpy(huzong->name, "老刘");
    laoliu->lead = NULL;
    laoliu->prev = lisi;
    laoliu->next = NULL;
    strcpy(huzong->name, "小彭");
    xiaopeng->lead = NULL;
    xiaopeng->prev = NULL;
    xiaopeng->next = xiaochen;
    strcpy(huzong->name, "小陈");
    xiaochen->lead = NULL;
    xiaochen->prev = xiaopeng;
    xiaochen->next = NULL;
    return huzong;
}

void list(node* head)
{
    printf("%s", head->name);
    list(head->lead);
    list(head->next);
}

node* find(node* head, char* ex_name)
{
    int i = 1;
    i = strcmp((head->name), *ex_name);
    if(i==0)
    {
        return head;
    }
    find(head->lead, ex_name);
    find(head->next, ex_name);
    return NULL;
}

void lead(node* new_node, node* existing)
{
    existing->lead = new_node;
    new_node->lead = NULL;
    new_node->next = NULL;
    new_node->prev = NULL;
}

void follow(node* new_node, node* existing)
{
    existing->next = new_node;
    new_node->prev = NULL;
    new_node->lead = NULL;
    new_node->next = NULL;
}


int main()
{
    char input[60]="a";
    char new_name[12]="a";
    char ex_name[12]="a";
    while(1)
    {
        node* head;
        node* temp = NULL;
        head = init();
        gets(input);
        for(int i = 0; i < 50; i++)
        {
            //init初始化实现
            if(input[i]=='i'&&input[i+1]=='n'&&input[i+2]=='i'
                    &&input[i+3]=='t')
            {
                init();
                printf("链表构造完成,现有9名员工");
            }
            //list遍历功能实现
            if(input[i]=='l'&&input[i+1]=='i'&&input[i+2]=='s'
                    &&input[i+3]=='t')
            {
                list(head);
            }
            //lead功能实现
            if(input[i]=='l'&&input[i+1]=='e'&&input[i+2]=='a'
                    &&input[i+3]=='d')
            {
                for(int j=0; j<=i-2; j++)
                {
                    new_name[j] = input[j];

                }
                printf("%s", new_name);
                for(int k=i+8; k<=i+20; k++)
                {
                    ex_name[k-i-8] = input[k];
                }
                printf("%s", ex_name);
                node* new_node = (node*)malloc(sizeof(node));
                strcpy(new_node->name, new_name);
                printf("strcpy完成");
                temp = find(head, ex_name); //问题在此
                printf("find完成");
                temp->lead = new_node;
            }

        }
    }
}
c struct initialization c-strings
1个回答
0
投票

您的代码不是有效的 C,因为您无法以这种方式初始化结构体字段。

char name[12] = "a";

如果您动态为

name
分配内存,我建议使用
calloc
将所有字节设置为零。

例如:

typedef struct node {
    char *name;
    ...
} node;

node *new_node(char *name) {
    node *n = malloc(sizeof(node));
    n->name = calloc(12, sizeof(char));
   
    strncpy(n->name, name, 11);

    return n;
}
© www.soinside.com 2019 - 2024. All rights reserved.