需要c基本结构帮助
我想使用指针将值复制到结构中 我一直从这段代码中发现分段错误需要c基本结构帮助,c,struct,C,Struct,我想使用指针将值复制到结构中 我一直从这段代码中发现分段错误 struct companyInfo { double sharePrice; char companyName[100]; }; int main() { struct companyInfo * pdata = NULL; strcpy(pdata->companyName, "sdfsd"); exit(0); } 您没有为结构分配任何空间,只是一个空指针 struct co
struct companyInfo
{
double sharePrice;
char companyName[100];
};
int main()
{
struct companyInfo * pdata = NULL;
strcpy(pdata->companyName, "sdfsd");
exit(0);
}
您没有为结构分配任何空间,只是一个空指针
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()分配的任何内存,例如。。需要显式释放
例如:
if( pdata != NULL )
{
free( pdata );
}
exit(0);
问题不在于使用结构,而在于尝试使用空指针。试着这样做:
struct companyInfo *pdata = malloc(sizeof(*pdata));
strcpy(pdata->name, "sdfsd");
companyInfo
是指向结构的指针,该指针指向NULL
。所以当你尝试去引用它时,你得到了seg错误。您需要使用malloc
为指向的结构指针分配一些空间,或者在堆栈上声明结构
出于练习的目的,我会选择选项2,因为它更简单。只要做:
int main()
{
struct companyInfo pdata;
strcpy(pdata.companyName, "sdfsd");
exit(0);
}
因为在companyInfo
之后没有*
,pdata
不是指向结构的指针,而是一个结构。请尝试以下操作:
int main() {
struct companyInfo pdata;
pdata.companyName = "sdfsd";
}
可以一次设置结构中的所有变量:
struct companyInfo pdata = { 2.3425, "company" };
提示:在使用结构之前使用typedef:
typedef struct companyInfo companyInfo;
因此,您不必每次都键入“struct companyInfo”。您现在只需使用:
companyInfo pdata;
希望我能帮忙:)+1。但是,请提及需要
免费这一点。还应使用strncpy
。同意。我想如果作者没有分配,我也应该指出免费的。更新,谢谢。我同意strcpy
是一个错误的选择,但由于空终止问题,我不确定向某人介绍strncpy
的奇怪之处是否是最好的主意。@user967797没问题。如果这回答了您的问题,您可以单击答案旁边的复选标记,以便其他人将此问题视为已回答以及对您有效的解决方案
字段定义改为char companyName[5]代码>??请将您的呼叫更改为strncpy
,以正确处理此类情况。