2012-03-07 4 views
0

構造体の配列に問題があります。 私は構造体の配列の要素に文字列の一部をコピーしようとしています。ここ構造体の配列の要素に文字列の一部をコピーするには?

を(それはあまり明確鳴らない場合は申し訳ありません)私のコードは

#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

+0

大きな配列 'struct dict entry [2562]'をスタックに割り当てるため、segfaultが得られるかもしれません。関数からそれを移動し、それが機能するかどうかを確認してください。 – dasblinkenlight

+0

デバッガで実行してみると、エラーの場所を特定し、変数を調べて問題の原因を調べるのに役立ちます。 –

答えて

3

while(a != 't')を助けてくださいこれは

あなたは

char a = 0xff; 
while(a != '\0'){...} 
を意味した無限ループです3210

?このタスクforため

ADD

は、あなたのコード内でセグメンテーションフォールトの

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

while(a!= 'h')私は終わるまで文字列をコピーしようとしています。 – peanutbutterjelly

+0

jellygurl、 'h'は文字列の終わりにどのように関連していますか?@triclosanは '\ 0' – snibu

3

一つの可能​​性は、スタックオーバーフローされ、より明確です。

構造体の各変数は約17KBのサイズになります。このような変数を2562作成すると、約43554KBの合計を42MBに割り当てる必要があります。

最大スタックサイズの制限は、シェルからulimit -sを実行することでチェックできます。スタックオーバーフローが43554未満であれば最大スタックサイズの上限を確認できます。

これが当てはまる場合は、ulimit -s 43554またはそれ以上のビットを使ってスタック制限を増やしてみてください。

関連する問題