我想使用指針將值複製到struct
。c基本結構幫助需要
我不斷從這段小小的代碼中得到分段錯誤。
struct companyInfo
{
double sharePrice;
char companyName[100];
};
int main()
{
struct companyInfo * pdata = NULL;
strcpy(pdata->companyName, "sdfsd");
exit(0);
}
我想使用指針將值複製到struct
。c基本結構幫助需要
我不斷從這段小小的代碼中得到分段錯誤。
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(),ex ..分配的內存都需要明確釋放。
例子:
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 struct companyInfo companyInfo;
所以你:使用一個結構之前使用的typedef不必每次輸入「struct companyInfo」。現在,您可以簡單地使用:
companyInfo pdata;
希望我幫助:)
+1。但請提到需要「免費」。還應該使用'strncpy'。 – 2012-03-09 18:23:17
同意。我想如果作者沒有分配,我應該指出免費。更新,謝謝。 – 2012-03-09 18:25:35
我同意'strcpy'是錯誤的選擇,但我不確定引入某人到'strncpy'的怪異是由於空終止問題的最佳想法。 – dsolimano 2012-03-09 18:27:42