Я пытался оправдать свою логику при чтении ввода для моего интерпретатора команд. Проблема, с которой я столкнулся, это strstr()
либо не принимает "%s"
как игла, либо обрабатывает весь haystack как строку и игнорирует пробелы, символы перевода и т. Д. Из-за этого.Определение нескольких разделенных пространством входов в буфере C
char command[4] = "";
char arg1[512] = "";
char arg2[512] = "";
char tmp[1029] = "";
char buffer[BUFFERSIZE];
memset(buffer, '\0', BUFFERSIZE);
while(fgets(buffer, BUFFERSIZE, stdin) != NULL){
strcpy(command, "");
strcpy(arg1, "");
strcpy(arg2, "");
strcpy(tmp, "");
if(strstr(buffer, "%s\n") != NULL)
sscanf(buffer, "%s", command); // 0 arguments
if(strstr(buffer, "%s %s") != NULL)
sscanf(buffer, "%s", arg1); // 1 argument
if(strstr(buffer, "%s %s %s") != NULL)
sscanf(buffer, "%s", arg2); // 2 arguments
printf("%s %s %s\n", command, arg1, arg2);
}
Независимо от того, что я вход:
- ком
- вал argument1val
- CMD arg1 arg2val
- и т.д.
Я всегда в конечном итоге с пустыми массивами символов для command
, arg1
и arg2
.
Мой вход всегда будет содержать одну строку или до трех разделенных пробелом строк, за которыми следует символ новой строки.
Это была именно та логика, которую я пытался придумать! Спасибо за вашу помощь! –