如何将字符串的一部分复制到struct数组的元素?
我的结构数组有问题。 我试图将字符串的一部分复制到struct数组的一个元素。(如果听起来不太清楚,请道歉) 这是我的密码如何将字符串的一部分复制到struct数组的元素?,c,arrays,string,segmentation-fault,structure,C,Arrays,String,Segmentation Fault,Structure,我的结构数组有问题。 我试图将字符串的一部分复制到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 m
#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;
}
#包括
#包括
结构指令{
字符键[1024];
字符值[16384];
智力水平;
};
int main()
{
结构目录条目[2562];
char str[]=“我将完成我的mp”;
int j=0;
int i=0;
字符温度[1024];
字符a=0;
而(a!=“h”){
a=str[i];
温度[i]=str[i];
i++;
}
strcpy(条目[0]。值,str);
puts(条目[0]。值);
返回0;
}
它可以编译,但它确实有分段错误,我不知道它出了什么问题
请帮助while(a!=“t”)
这是无限循环
你是说
char a = 0xff;
while(a != '\0'){...}
?
添加
对于此任务,for
更为清晰
int cnt = srtlen(str);
for(int i = 0; i < cnt; i++)
temp[i] = str[i];
int cnt=srtlen(str);
对于(int i=0;i而(a!=“t”)
这是无限循环
你是说
char a = 0xff;
while(a != '\0'){...}
?
添加
对于此任务,for
更为清晰
int cnt = srtlen(str);
for(int i = 0; i < cnt; i++)
temp[i] = str[i];
int cnt=srtlen(str);
对于(int i=0;i
代码中出现分段错误的一种可能性是堆栈溢出
结构中的每个变量大小约为17KB,您正在创建2562个此类变量,这意味着总共需要分配43554KB,即42MB
在shell中执行ulimit-s
可以检查最大堆栈大小的限制,如果该限制小于43554,则单击stackoverflow
如果是这种情况,您可以尝试通过执行ulimit-s 43554
或更多操作来增加堆栈限制。代码中出现分段错误的一种可能性是堆栈溢出
结构中的每个变量大小约为17KB,您正在创建2562个此类变量,这意味着总共需要分配43554KB,即42MB
在shell中执行ulimit-s
可以检查最大堆栈大小的限制,如果该限制小于43554,则单击stackoverflow
如果是这种情况,您可以尝试通过执行ulimit-s 43554
或更多操作来增加堆栈限制。struct dict entry[2562]代码>可能太大,无法放入自动存储(“在堆栈上”)使其全局化或动态分配。您可能会遇到SEGFULT,因为您在堆栈上分配了大数组struct dict entry[2562]
。尝试将它移出函数,看看它是否有效。尝试在调试器中运行它,它将帮助您确定错误位置,并让您检查变量以了解可能存在的问题。@triclosan我正在尝试复制str,直到finish@dasblinkenlight即使我将其设置为全局struct dict条目[2562],我仍然会得到segfault代码>可能太大,无法放入自动存储(“在堆栈上”)使其全局化或动态分配。您可能会遇到SEGFULT,因为您在堆栈上分配了大数组struct dict entry[2562]
。尝试将它移出函数,看看它是否有效。尝试在调试器中运行它,它将帮助您确定错误位置,并让您检查变量以了解可能存在的问题。@triclosan我正在尝试复制str,直到finish@dasblinkenlight即使我让它成为全球平均值,我仍然会得到SEGFULT(a!=“h”)我正在尝试复制字符串直到完成。jellygurl,“h”与字符串的完成有何关系?…正如@triclosan指出的,它应该是“\0”,我的意思是,(a!=“h”)我正在尝试复制字符串直到完成。jellygurl,“h”与字符串的完成有何关系?…正如@triclosan指出的,它应该是“\0”