2014-08-27 1 views
1

У меня вопрос о том, почему мой код не будет компилироваться, когда я использую strcmpi. Я тестировал этот же код с помощью strcmp, и это сработало. Не знаю, почему это не работает.Код strcmpi не компилируется, но strcmp будет?

здесь ошибка компиляции я получаю:

gcc -std=c99 strcmpi_test.c -o strcmpi_test 
strcmpi_test.c: In function 'main': 
strcmpi_test.c:15: warning: implicit declaration of function 'strcmpi' 
strcmpi_test.c:30:2: warning: no newline at end of file 
/tmp/cceKXLcn.o: In function `main': 
strcmpi_test.c:(.text+0x50): undefined reference to `strcmpi' 
collect2: ld returned 1 exit status 



#include <stdio.h> 
#include <string.h> 


int main() 
{ 

    char name[10]; 

    char name2[10] = "bob"; 

    printf("what is your name : "); 
    fgets(name,10,stdin); 

    if(strcmpi(name,name2) == 1) 
    { 

     printf("name == %s name2 == %s your names are the same\n",name,name2); 

    } else { 

     printf("name == %s name2 == %s your names are NOT the same\n",name,name2); 


    } 


    return 0; 

} 
+5

'strcmpi' не является стандартной функцией. В Linux существует 'strcasecmp', что делает сравнение без учета регистра. –

+1

@MOehm Правильно, но вы должны также упомянуть, что эта функция может быть объявлена ​​только в '' (обратите внимание на дополнительный S). Linux имеет его в '', но большинство из * * BSD этого не делают. – zwol

+1

@ Zack: Хорошая точка; Я этого не знал. (Но я доверяю OP, чтобы найти функцию и где она объявлена, как только имя будет известно.) –

ответ

0

strcmpi не является стандартной функцией C. И компилятор сообщает, что у него нет объявления функции strcmpi.

Вы можете написать подобную функцию самостоятельно с помощью цикла и функции toupper или tolower decalred в заголовке <ctype.h>