2012-10-23 64 views
0

我在同一個項目但一個稍微不同的typedef工作作爲本question,:總線錯誤使用C函數strncpy

typedef struct { 
    char* word; 
    int index; 
} data_t; 

typedef struct node node_t; 

typedef node { 
    void *data; 
    node_t *left; 
    node_t *right; 
} 

我試圖將一個字符串分解成單個的詞,它堅持到data_t結構,然後將其插入到二叉搜索樹中。這個想法是,當在輸入字符串中循環時,當發現字符是標記字的結尾的字符時,字的開始和結束之間的字符數被複制到字符串中,試圖用做:

strncpy(newstring, (in+wordstart), (i-wordstart)); 

其中:

char* newstring, in; 
int i, wordstart; 

然而,GCC提供了一個總線錯誤時特定的行被調用。如何解決這種總線錯誤並保留當前的解決方案,或者尋找其他解決方案會更明智一些?

到目前爲止我唯一能想到的想法是,一次一個字符,將字符放入字符串中,直到達到單詞的末尾。

+0

你需要發佈更多的代碼。 –

+0

你如何爲所有這些字符串分配內存? – Mat

+0

'char * newstring,in'只是指向一些隨機存儲器的指針。你需要讓它們指向一些有效的內存,屬於該進程的內存。 – alk

回答

3

這不申報兩個指針,這只是一個指針和一個char

char* newstring, in; 

應該聲明如下:

char *newstring, *in; 

此外,如別人注意,這不是你似乎沒有爲這些指針分配任何內存。

+1

好抓!還有一個很好的例子,爲什麼總是在自己的行上聲明一個變量! ;-) – alk

+0

哈哈非常好點,並感謝您指出!老實說,我把它放在那裏,以指示如何定義strncpy行。 in通過'char * in'傳遞給函數,儘管'newstring'聲明如上。雖然我會牢記你的觀點:) – disgruntledperson

1

此:

typedef node { 
    void *data; 
    node_t *left; 
    node_t *right; 
} 

沒有任何意義可言。在node之前沒有struct關鍵字,並且在}之後沒有您想要引入的類別別名,也沒有終止分號。這不應該編譯。