2012-03-07 76 views
0

我遇到了struct數組的問題。 我試圖將一個字符串的一部分複製到一個結構數組的一個元素。 (抱歉,如果這聽起來並不清楚)如何將一部分字符串複製到struct數組的元素中?

這裏是我的代碼

#include <stdio.h> 
#include <string.h> 

struct dict { 

char key[1024]; 

char value[16384]; 

int level; 

}; 

int main() 
{ 
struct dict entry[2562]; 
char str[]="i will finish my mp"; 
int j=0; 
int i = 0; 
char temp[1024]; 
char a =0; 

while(a != 'h'){ 
    a = str[i]; 
    temp[i] = str[i]; 
    i++; 
} 
strcpy(entry[0].value,str); 
puts(entry[0].value); 



return 0; 
} 

它編譯但它確實分段錯誤,我不知道是什麼地方錯了 請幫助

+1

'struct dict entry [2562];'可能有點太大而不適合自動存儲(「在堆棧上」)使其成爲全局或動態分配。 – wildplasser 2012-03-07 12:12:59

+0

由於您在堆棧中分配了大型數組'struct dict entry [2562]',因此可能會出現段錯誤。嘗試將其移出該功能並查看它是否有效。 – dasblinkenlight 2012-03-07 12:13:39

+0

嘗試在調試器中運行它,它將幫助您查明錯誤位置並讓您檢查變量以查看可能存在的問題。 – 2012-03-07 12:16:16

回答

3

while(a != 't')這是無限循環

你的意思

char a = 0xff; 
while(a != '\0'){...} 

ADD

這個任務for更清楚你的代碼段錯誤的

int cnt = srtlen(str); 
for(int i = 0; i < cnt; i++) 
    temp[i] = str[i]; 
+0

我的意思是while(a!='h')我試圖複製字符串直到完成。 – peanutbutterjelly 2012-03-07 12:24:59

+0

jellygurl,'h'與字符串的結束有什麼關係?...... @triclosan指出它應該是'\ 0' – snibu 2012-03-07 12:50:19

3

一種可能性是堆棧溢出。

你的結構的每個變量將是大約17KB的大小,並且你正在創建2562個這樣的變量,這意味着總共需要分配大約43554KB,其中42MB。

你可以通過從shell中執行ulimit -s來檢查你的最大堆棧大小的限制,如果它小於43554,你可以打擊stackoverflow。

如果是這種情況,您可以嘗試通過做ulimit -s 43554或更多一點來增加堆棧限制。

相關問題