我想使用指针将值复制到struct
。
我不断从这一小段代码中获得分段错误。
struct companyInfo
{
double sharePrice;
char companyName[100];
};
int main()
{
struct companyInfo * pdata = NULL;
strcpy(pdata->companyName, "sdfsd");
exit(0);
}
答案 0 :(得分:6)
您没有为结构分配任何空间,只是一个空指针。
struct companyInfo * pdata = NULL;
pdata = calloc( 1, sizeof(struct companyInfo) );
if( pdata != NULL )
{
strncpy(pdata->companyName, "sdfsd", sizeof(pdata->companyName) - 1);
}
注意:calloc()
也会将内存归零,而不是malloc()
。此外,您应该检查这些函数的返回,以确保指针不是NULL。
重要:需要显式释放使用malloc(),calloc(),ex ..分配的任何内存。
示例:
if( pdata != NULL )
{
free( pdata );
}
exit(0);
答案 1 :(得分:1)
companyInfo
是指向结构的指针,该指针指向NULL
。因此,当您尝试取消引用它时,您会遇到seg错误。您需要使用malloc
为struct指针指定一些空间来指向,或者在堆栈上声明结构。
为了练习的目的,我会选择2,因为它更简单。只是做:
int main()
{
struct companyInfo pdata;
strcpy(pdata.companyName, "sdfsd");
exit(0);
}
因为*
之后没有companyInfo
,pdata
不是指向结构的指针,而是结构。
答案 2 :(得分:1)
试试这个:
int main() {
struct companyInfo pdata;
pdata.companyName = "sdfsd";
}
您可以立即在结构中设置所有变量:
struct companyInfo pdata = { 2.3425, "company" };
提示:在使用struct之前使用typedef:
typedef struct companyInfo companyInfo;
所以你不必每次都输入“struct companyInfo”。您现在可以简单地使用:
companyInfo pdata;
希望我帮助过:)
答案 3 :(得分:0)
问题不是使用结构,而是尝试使用空指针。尝试这样的事情:
struct companyInfo *pdata = malloc(sizeof(*pdata));
strcpy(pdata->name, "sdfsd");