Итак, моя программа предназначена для небольшой командной строки, но она продолжает падать:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void main()
{
char cmd;
for(;;)
{
fgets(cmd,255,stdin);
if (strstr(cmd,"CD")!=NULL )
{
cmd +=2;
SetCurrentDirectory(cmd);
}
else
{
system(cmd);
}
}
}
ожидается вывод компилятора lvalue.
Он успешно скомпилировался?
возможно, вы хотели бы, чтобы cmd
был массивом символов. char cmd[255];
Предупреждения компилятора говорят вам, где вы допустили ошибки, которые здесь
если я использую [255], это вызывает ошибки в строке 15
Почему cmd +=2; И как вы планируете выходить из цикла?
я использую +=2, чтобы избавиться от компакт-диска и оставить пример /users\username
Отредактируйте вопрос, чтобы показать фактический код и добавьте вывод компилятора.
Возможно, вы хотите сделать что-то вроде этого:
void main()
{
char cmd[255]; // this allocate a character array to store the command in
for(;;)
{
fgets(cmd,255,stdin); // get the characters from stdin and store them in the cmd character array with a max length of 255
if ( strncmp(cmd, "CD ", 3) == 0 ) // check if the first three characters are "CD "
{
SetCurrentDirectory(&cmd[3]); // pass the string not including the first 3 charcters, which should be "CD "
}
else
{
system(cmd);
}
}
}
Спасибо за ваш отзыв. :)
Рад помочь. Если вы хотите изучить C, вы должны потратить время и попытаться выяснить, что делает каждая строка и почему. Это было бы очень полезно для вас. Почему использование char cmd;
не сработало, а использование char cmd[255];
сработало? Какая разница?
@darrenthebozz: подумайте также об использовании fgets( cmd, sizeof(cmd), stdin ) ;
. Также имейте в виду, что пользователь может ввести дополнительный пробел между командой и ее аргументом.
Поскольку это Windows, пользователь мог ввести CD
, cd
, Cd
или cD
, опубликованный код обрабатывает только CD
Кроме того, в Windows пользователь мог не помещать пробел между cd
и новым именем каталога.
Множество улучшений, которые вы могли бы сделать, чтобы сделать его похожим на окна, основанные на OP. Я думаю, что лучше сделать его простым, чтобы OP мог сосредоточиться на таких вещах, как различие между char cmd;
и char cmd[255];
, и пока не беспокоиться о лишних пробелах и тому подобном.
Включить предупреждения компилятора. Или исправить те, которые вы получаете.