数组操作和memset问题

时间:2017-07-28 21:49:53

标签: c arrays memset

我有一个C程序,它从stdin中读取字符(使用getchar),直到读取一个空行,然后添加一个NULL元素,并在空行被发送到execve之前读取所有字符。然后,读取更多字符并将其添加到同一个数组(我在第一次调用execve后尝试重置),直到读取另一个空行,然后执行第二个部分。我在每次调用execve之后使用memset重置数组时遇到问题,并且使用args [i] = NULL以便我可以将我的数组传递给execve。

e.g。用法:

回波

您好

看到空行后

执行“echo hello”

再见

*应该cat文件“再见”,但前两个参数实际上是“echo”和“NULL”

int main()
{
  int pid, status, c, size = 10, length = 0, i, blankflag = 0, alrdyexec = 0;
  char argument[1000];
  char **args;
  char *token;
  args = (char**)malloc(size);
  extern int process(char **args);
  fflush(stdout);

while ((c = getchar()) != EOF) {
    if (length == size) {
        size += 10;
        args = realloc(args, size);
    }
    if (c != '\n') {
        argument[length++] = c;
        blankflag = 0;
        alrdyexec = 0;
    } else if ((c == '\n') && (blankflag == 0)) {
        blankflag = 1;
        argument[length++] = c;
    } else if ((c == '\n') && (blankflag == 1) && (alrdyexec == 0)) {
        alrdyexec = 1;
        i = 0;
        memset(args, 0, sizeof(args));
        token = strtok(argument, "\n");
        while (token != NULL) {
            args[i] = token;
            token = strtok(NULL, "\n");
            i++;
        }
        args[i] = NULL;
        // here it executes a function which runs execve
        }
        }
    return(0);
}

0 个答案:

没有答案