c需要基本结构帮助

时间:2012-03-09 18:19:43

标签: c struct

我想使用指针将值复制到struct

我不断从这一小段代码中获得分段错误。

struct companyInfo
{
    double sharePrice;
    char companyName[100];
}; 

int main()
{
    struct companyInfo * pdata = NULL;
    strcpy(pdata->companyName, "sdfsd");

    exit(0);
}

4 个答案:

答案 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);
}

因为*之后没有companyInfopdata不是指向结构的指针,而是结构。

答案 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");