2016-04-18 5 views
-2

Итак, я работаю над проектом по созданию и использованию оболочки. Одна вещь, которая должна быть выполнена, - «executable | -p | prompt |» должна позволить пользователю выбирать пользовательскую подсказку. В противном случае значением по умолчанию должно быть «257sh>». Я написал свой код, чтобы сделать это, независимо от того, что он продолжает двигаться в инструкцию else. После некоторых экспериментов я знаю, что моя строка argv[1] == "-p" является тем, что вызывает проблему, потому что без нее работает код. Дело в том, что когда я печатаю argv [1], он печатает «-p», (при условии, вот что я вход). Вот моя функция оболочки.Сравнение строк C против указателей строк для равенства

void shellLoop(char *n) 
{ 
    char *line; 
    char **args; 
    int status; 
    char name = n; 

    do{ 
     printf("%s>", n); 
     line = sysReadLine(); 
     args = splitLine(line); 
     status = execute(args); 

     free(line); 
     free(args); 
    }while(status); 
} 

А вот моя главная функция

int main(int argc, char *argv[]) 
{ 
    if(argc == 3 && argv[1] == "-p"){ 
     shellLoop(argv[2]); 
    } 
    else{ 
     shellLoop("257sh"); 
    } 

    return EXIT_SUCCESS; 
} 
+3

'argv [1] ==" -p "': использовать 'strcmp' вместо' == 'в C. – BLUEPIXY

ответ

2

Когда вы argv[1] == "-p" у ou сравнить два указатели и два указателя, которые никогда не будут одинаковыми.

Для сравнения строк в C вы используете функцию strcmp: strcmp(argv[1], "-p") == 0.

1

Вы можете также использовать strncmp (char * str1, char * str2, int n) для сравнения первых n байтов из двух строк.

+0

« Также »подразумевает, что фактически показан метод, который он не работает. И так как обе строки гарантированы как «nul'-terminated,' strncpy' не требуется. – Olaf

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