for循环不正常

时间:2015-09-15 19:03:01

标签: c linux

我在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));
    }
  }
}

1 个答案:

答案 0 :(得分:4)

某些东西正在改变迭代之间的c值。没有赋值,只有printf()将其作为参数,因此它是由内存分配错误完成的。

最有可能追加(entry,line [c])写入entry [] =&#34;&#34;,一个以零结尾的字符串,如果由于某种原因,编译器可能在int c之前在内存中分配它没有把c放在寄存器中。因此,附加到char *条目的写入是将行[c]写入内存,其中c是覆盖它。

在调试器中测试或尝试更改条目分配。