2012-03-07 80 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或更多一点来增加堆栈限制。

相关问题