2015-10-13 2 views
0

Я пишу программу, где мне нужно получить пользовательский ввод имени программы и до 2 параметров, а затем выполнить указанную программу. Моя проблема связана с вводом пользовательского ввода и согласованием его с строкой «./», которую программа будет выполнять из данного каталога. То, к чему я до сих пор пытался работать, это.Конкат пользовательский ввод на строку в C

int main(int argc, char *argv[])){ 
    int counter = 0; 
    char input[80]; 
    char ProgramName[80]; 
    printf("Enter program name and any parameters: "); 
    fgets(input, 80, stdin); 
    while(!isspace(input[counter])){ 
     ProgramName[counter] = input[counter]; 
     counter++; 
    } 
} 

Я использую isspace для проверки пустого пространства, и когда я сталкиваюсь, я знаю, что следует и параметр Я, что это конец имени программы. Моя проблема заключается в том, как мне сопоставить имя программы с ./ без каких-либо лишних символов пробела или чего-либо, что не приведет к его правильной работе? Я пробовал использовать strcpy и strcat, но я получаю кучу странных конечных символов в окне команд, когда я это делаю.

+0

fscanf кажется подходящим для C – sehe

+1

'scanf' никогда не подходит. – melpomene

+0

В какой момент в вышеуказанной программе вы ожидаете добавить '. /'? По сути, эта строка не встречается * в любом месте * в коде, который вы указали. В противном случае это выглядит не совсем правильно. – 5gon12eder

ответ

2

Возможно, вы видите трейлинг-мусор, потому что ProgramName не является строкой: ему не хватает терминатора NUL. Вы можете исправить это, добавив

ProgramName[counter] = '\0'; 

после петли.

Чтобы добавить в строку ./, почему бы не сделать это в начале?

int counter_a = 0, counter_b = 0; 
... 
ProgramName[counter_a++] = '.'; 
ProgramName[counter_a++] = '/'; 
while (!isspace(input[counter_b])) { 
    ProgramName[counter_a++] = input[counter_b++]; 
} 
ProgramName[counter_a] = '\0'; 

Наконец, пропусканием char к isspace неправильно, потому что isspace определяется только неотрицательные входы, но char может быть отрицательным. Вы можете исправить это:

while (input[counter] != '\0' && !isspace((unsigned char)input[counter])) { 

Я также добавил чек на '\0' выше. Это необходимо, чтобы не читать до конца input, если он не содержит пробелов.

Смежные вопросы