循环清除我的阵列? (C)

时间:2011-07-28 23:40:39

标签: c arrays string

我一直在努力解决这个问题,我想知道是否有人能找到我做错了什么。我从stdin读取用户输入,分解他们通过strtok()输入的字符串,并将其存储到char *的数组中。 char *的数组是在while循环之外定义的。

所以:用户通过stdin键入输入,并且数组中填充了来自命令的每个单词的字符串。

问题是,如果用户只是点击输入,我希望数组保持它的价值!我希望相同的值保留在数组中...所以我可以重新执行相同的命令。似乎while循环正在清除我的char *数组。这是代码:

char *commands[3];
char *result = NULL;
char delims[] = "     "; //a space AND a tab!
while (1) {

    printf(PROMPT);

    //Gathers user input!        
    char *input;
      char stuff[230];
      input = fgets(stuff, 230, stdin);

    printf("input has length %i\n", strlen(input));
    int helper = strlen(input);
    int i = 0;

    result = strtok(input, delims);
    printf("helper has length %i\n", helper);
    printf("commands[0] CHECK 1:%s", commands[0]);
    if (helper >1)
    {        
        while( result != NULL) 
        {
            printf("while gets hit!\n");
            if (i < 4)
            {            
                commands[i] = result;
                    result = strtok(NULL, delims );
                i++;    
            }
        }
    }


    printf("commands[0] is CHECK 2:%s", commands[0]);
    if (strncmp(commands[0], "step", 4) == 0)
    {
        lc3_step_one(p);
    }
    printf("commands[0] is CHECK 3:%s", commands[0]);
}      

如果用户按下输入,printf的CHECK 1,CHECK 2和CHECK 3都不会打印任何内容。在他们最后输入“step”的情况下,我希望“step”保留在数组中,然后再次执行!

1 个答案:

答案 0 :(得分:2)

您正在使用指向stuff数组的指针填充命令数组。每次都会被fgets覆盖该数组(可能用null替换第一个字符)。您需要复制数据以保留它。