gpt4 book ai didi

c - strcpy() 中的段错误

转载 作者:行者123 更新时间:2023-12-01 07:58:56 26 4
gpt4 key购买 nike

我有这样一个基本结构

typedef struct struck {
char* id;
char* mat;
int value;
char* place;
} *Truck;

还有一个像这样的函数,它创建了该结构的一个新“实例”:

Truck CTruck(char* id, char* mat, int value, char* place) {
Truck nT = (Truck) malloc(sizeof (Truck));
nT->value = value;
strcpy(nT->id, id);
strcpy(nT->mat, mat);
strcpy(nT->place, place);
return nT;
}

我在第一个 strcpy 中遇到错误。编译没有问题。

最佳答案

您的 typedef 将 Truck 定义为 struct struck *,即指针。所以它的大小将是 48 取决于架构而不是结构的大小

使用 sizeof(*Truck) 获取结构的实际大小。

您还需要为字符分配内存。最简单的方法是使用 strdup()

Truck CTruck(const char* id, const char* mat, int value, const char* place) {
Truck nT = malloc(sizeof (*Truck));
nT->value = value;
nT->id = strdup(id);
nT->mat = strdup(mat);
nT->place = strdup(place);
return nT;
}

但是,我建议更改您的 typedef,使其成为结构的别名,而不是指向它的指针:

typedef struct {
char* id;
char* mat;
int value;
char* place;
} Truck;

然后在你的函数中使用这个:

Truck *nT = malloc(sizeof(Truck));

关于c - strcpy() 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10143549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com