我在Linux Gentoo机器上使用c,内核4.0.5。
在for循环(for c=5
)中,循环没有正确递增,我得到以下输出:
character 5: 1
character 1: e
而不是:
character 5: 1
character 6: 2
character 7: 3
我无法弄清楚为什么在第一次迭代后c
的值为1
。
这是我的代码:
readconfig(FILE * config,GtkComboBoxText * combo)
{
char line[256];
char entry[]="";
int c;
int current_line;
int no_of_sets=0;
int number_of_lines=getlines(config);
printf("number of lines is: %i\n",number_of_lines);
while (fgets(line, sizeof line, config) != NULL)
// for (current_line=0;current_line<number_of_lines;current_line++)
{
// fgets(line,sizeof line,config);
printf("line contents are: %s\n",line);
if (strncmp(line , "set ", 4)==0)
{
printf("hello\n");
no_of_sets = no_of_sets++;
for (c=5;c<255;c++)
{
if (line[c]=='\0'|| line[c]=='\n' || line[c]=='"' || line[c]==' ')
break;
printf("character %i: %c\n",c,line[c]);
append(entry,line[c]);
};
printf("the value of entry is %s\n",entry);
gtk_combo_box_text_append_text(combo,entry);
memset(&entry[0], 0, sizeof(entry));
}
}
}
答案 0 :(得分:4)
某些东西正在改变迭代之间的c值。没有赋值,只有printf()将其作为参数,因此它是由内存分配错误完成的。
最有可能追加(entry,line [c])写入entry [] =&#34;&#34;,一个以零结尾的字符串,如果由于某种原因,编译器可能在int c之前在内存中分配它没有把c放在寄存器中。因此,附加到char *条目的写入是将行[c]写入内存,其中c是覆盖它。
在调试器中测试或尝试更改条目分配。