我有一个由char*
和许多属性组成的结构。
我无法将char*
打印为字符串,它只会崩溃。
这是我的代码:
int main() {
sommet_t* sommet = creerSommet("rouge", 5, NULL);
printf("Couleur : %s", sommet->couleur);
return 0;
}
我的sommet.c:
sommet_t* creerSommet(char* couleur, int distance, sommet_t* pere) {
sommet_t* sommet = malloc(sizeof(sommet_t));
sommet->distance = distance;
sommet->couleur = (char*)malloc((strlen(couleur)+1) * sizeof(char));
strcpy(sommet->couleur,couleur);
sommet->pere = pere;
}
我绝对不知道其中有什么错误。
编辑:sommet.h
#ifndef __SOMMET_H__
#define __SOMMET_H__
typedef struct sommet_type {
char *couleur;
int distance;
struct sommet_type *pere;
} sommet_t;
sommet_t* creerSommet(char*, int, sommet_t*);
#endif
答案 0 :(得分:3)
您应该从函数creerSommet
sommet_t* creerSommet(char* couleur, int distance, sommet_t* pere) {
sommet_t* sommet = malloc(sizeof(sommet_t));
sommet->distance = distance;
sommet->couleur = (char*)malloc((strlen(couleur)+1) * sizeof(char));
strcpy(sommet->couleur,couleur);
sommet->pere = pere;
return sommet;
}
答案 1 :(得分:1)
您忘记从函数返回sommet
。
FWIW,任何预期返回某个值的函数,如果不是return
一个值,并且返回值在调用者中使用,则调用undefined behavior。
引用C11
,章节§6.9.1,功能定义
如果到达了终止函数的
}
,则使用函数调用的值 调用者,行为未定义。
那就是说,
malloc()
and family in C
. malloc()
是否成功。sizeof(char)
保证在C中为1
。将其用作乘数是多余的。