我正在尝试编写一个类似 shell 的简单接口,它接受用户输入(通过 char)并通过指向指针 * 的指针存储它(正是 argv 的工作原理)。这是我的代码:
char input[100];
char **argvInput;
char ch;
int charLoop = 0;
int wordCount = 0;
argvInput = malloc(25 * sizeof(char *));
while((ch = getc(stdin))) {
if ((ch == ' ' || ch == '\n') && charLoop != 0) {
input[charLoop] = '\0';
argvInput[wordCount] = malloc((charLoop + 1) * sizeof(char));
argvInput[wordCount] = input;
charLoop = 0;
wordCount++;
if (ch == '\n') {
break;
}
} else if (ch != ' ' && ch != '\n') {
input[charLoop] = ch;
charLoop++;
} else {
break;
}
}
如果我通过 argvInput 循环:
int i = 0;
for (i = 0; i < wordCount; i++)
printf("Word %i: %s\n", i, argvInput[i]);
argvInput[i] 的所有值都是最后一个输入赋值。所以如果我输入:“快乐的日子快到了”,循环的输出是:
Word 0: soon
Word 1: soon
Word 2: soon
Word 3: soon
Word 4: soon
我不知所措。显然每个循环都覆盖了以前的值,但我盯着屏幕,无法弄清楚为什么......