c - 如何在 C 中清除此数组指针?

标签 c arrays pointers

我正在尝试使用系统调用对基本 bash 进行操作,但我在使用指针数组时遇到了一些小问题。

为了恢复我的代码,我使用 read() 从标准输入读取命令到缓冲区,然后我使用 strsep() 将命令与参数分开,并将所有参数放入一个数组中。然后我使用 fork() 创建一个新进程,并使用 execvp() 的相关参数执行该命令。

所有这些都进入无限循环,直到用户键入“退出”(尚未编码)。问题是在第一次迭代之后,我需要 *pArgs 为空,用于下一个命令和参数。而且我不知道该怎么做...

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char **argv) {
    char bBuffer[BUFSIZ], *pArgs[10], *aPtr = NULL, *sPtr;
    int aCount;
    pid_t pid;

    while(1) {
        write(1, "\e[1;31mmyBash \e[1;32m# \e[0m", 27);
        read(0, bBuffer, BUFSIZ);

        sPtr = bBuffer;
        aCount = 0;

        do {
            aPtr = strsep(&sPtr, " ");
            pArgs[aCount++] = aPtr;
        } while(aPtr);

        pArgs[aCount-2][strlen(pArgs[aCount-2])-1] = '\0';

        // Debug code to output pArgs content
        write(1, "|>", 2);
        write(1, pArgs[0], strlen(pArgs[0]));
        write(1, "<|", 2);

        if(strlen(pArgs[0]) > 1) {
            pid = fork();

            if(pid == -1) {
                perror("fork");
                exit(1);
            }

            if(pid == 0) {
                execvp(pArgs[0], pArgs);
                exit(0);
            }
        }
    }

    return 0;
}

P.S:抱歉,我目前无法提供输入和输出测试用例。希望这不是那么难以理解和修复,你们不需要它。如果需要,我会稍后发布...

只是为了把事情弄清楚:
我知道我问过如何清除阵列并且我得到了答案。但是现在对我来说很明显我的问题不是那个,而是 litb 指出的缓冲区正在收集的垃圾。用空字符终止字符串比清除数组更有意义。这就是为什么我将 litb 的答案标记为正确答案。

最佳答案

int i;
for (i = 0; i < 10; i++)
   pArgs[i] = NULL;

关于c - 如何在 C 中清除此数组指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/873620/

相关文章:

带 while 循环的 C++ 数组

java - 引用数组中的位置而不是其中的数据。 ( java )

C 指针工作(但不像我预期的那样)

c++ - '->' 的基操作数具有非指针类型 'QStandardItemModel'

c - 递归查找数组的最大元素

c - 使用 Switch case 删除 C 中字符串中的标点符号

对 C 限制限定符感到困惑

c - 我如何在终端中查看 fork() 生成的进程的输出

c++ - 如何在保持顺序的同时填充一个整数数组?

c++ - 指针和引用之间的转换