Вот мой код, и системный вызов работает, когда есть только одно слово без пробела или чего-либо между ними (например, enter ...).Функция fgets не читает первый символ на входе
Например, когда я использую «pwd», вызов работает, но когда я использую что-то вроде ls -l
или, скажем, «cd file1 file2», он стирает первый символ и не принимает во внимание ничего после пробела.
Поэтому, когда я пишу «cd file1 file2», остается только «d» «cd». Что я могу сделать, чтобы этого не случилось?
#include <stdlib.h>
#include <stdio.h>
#include "Expert_mode.h"
void Expert_mode()
{
printf("Your are now in Expert mode, You are using a basic Shell (good luck) \nWe added the commands 'read_history', 'leave' and 'Easter_egg'. \n");
int a = 0;
while(a == 0)
{
char* line;
getchar();
printf("Choose a command : \n");
line = malloc(100*sizeof(char));
fgets(line, 100, stdin);
if(strcoll(line, "leave") == 0)
{
a = 1;
}
else if(strcoll(line, "read_history") == 0)
{
//read_history();
}
else if(strcoll(line, "Easter_egg") == 0)
{
// Easter_egg();
}
else
{
system(line);
}
}
}
Если вы собираетесь выделить буфер фиксированного размера, то почему бы не использовать массив? Тогда у вас не будет утечки памяти. –