2012-03-09 137 views
0

我想使用指針將值複製到structc基本結構幫助需要

我不斷從這段小小的代碼中得到分段錯誤。

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

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

    exit(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); 
+3

+1。但請提到需要「免費」。還應該使用'strncpy'。 – 2012-03-09 18:23:17

+0

同意。我想如果作者沒有分配,我應該指出免費。更新,謝謝。 – 2012-03-09 18:25:35

+0

我同意'strcpy'是錯誤的選擇,但我不確定引入某人到'strncpy'的怪異是由於空終止問題的最佳想法。 – dsolimano 2012-03-09 18:27:42

0

的問題不在於使用結構,但與試圖用一個空指針。嘗試是這樣的:

struct companyInfo *pdata = malloc(sizeof(*pdata)); 

strcpy(pdata->name, "sdfsd"); 
1

companyInfo是一個指向一個結構,而指針指向NULL。所以當你嘗試解除引用時,你會遇到seg錯誤。您可能需要使用malloc來爲結構指針指定一些空間,或者在堆棧中聲明該結構。

爲了您的練習目的,我會選擇2,因爲它更簡單。只要做到:

int main() 
{ 

    struct companyInfo pdata; 
    strcpy(pdata.companyName, "sdfsd"); 

    exit(0); 
} 

因爲沒有*companyInfopdata不是一個指向一個結構,而是一個結構。

1

試試這個:

int main() { 
    struct companyInfo pdata; 
    pdata.companyName = "sdfsd"; 
} 

您可以一次設定所有變量的結構:

struct companyInfo pdata = { 2.3425, "company" }; 

提示:

typedef struct companyInfo companyInfo; 

所以你:使用一個結構之前使用的typedef不必每次輸入「struct companyInfo」。現在,您可以簡單地使用:

companyInfo pdata; 

希望我幫助:)