Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要c基本结构帮助_C_Struct - Fatal编程技术网

需要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
,以正确处理此类情况。