我试图编写一个简单的shell接口,它接受用户输入(通过字符),并通过指针指向一个指针*(确切地说argv是如何工作的)。这里是我的代码:令牌化C中的用户输入(存储在** arg中)?
int i = 0;
for (i = 0; i < wordCount; i++)
printf("Word %i: %s\n", i, argvInput[i]);
argvInput的值[I]是什么最后输入分配是所有连接:通过argvInput
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;
}
}
如果我循环。所以,如果我输入: “幸福的日子即将到来”,环路的输出是:
Word 0: soon
Word 1: soon
Word 2: soon
Word 3: soon
Word 4: soon
我不知所措。显然,每个循环覆盖以前的值,但我盯着屏幕,无法弄清楚为什么...
你可能想看看进入['strtok'](http://en.cppreference.com/w/c/string/byte/ strtok)功能。如果您搜索,有很多示例可用。 – 2013-02-22 01:47:30
这最终将成为一个shell脚本(随着学期的进展而发展)。由于它最终必须处理管道和报价,因此strtok不会长期工作。 – 2013-02-22 02:31:15