c - 初始化结构中的字符串时出现错误
问题描述
我想用它的每个字符'\0'初始化一个字符串。(因为我稍后会使用gets(),所以第一个字符不是'\0'是可以的。)
所以我用“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,因为您不能以这种方式初始化结构字段。
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);
strncpy(n->name, name, 11);
return n;
}
推荐阅读
- javascript - 获取 `export {default as MyName} from './some-module';` 以使用 Jest (create-react-app)
- vue.js - 无法在 Vue 组件过滤器中访问“this”
- c# - C# 正则表达式,我可以在我的字符串上设置 MaxValue 而不是 MaxLength 吗?
- vba - 将小数格式化为百分比,对于 0,98 显示 100%
- android - Android studio - WiFi 调试 - 设备离线
- ios - 在自定义形状中设置和管理可编辑的 UITextview
- apache-spark - 为什么pyspark驱动不下载jar文件到本地存储?
- html - 使文本在父级中垂直居中,仅相对于小写字母的大小
- angular - Angular 如何从 authguard 中检索?
- java - ODBC Microsoft Access Error: Syntax error in update, delete statement