Являются ли функции stricmp()
и strnicmp()
удаленными в C99? Я всегда получаю предупреждение неявное объявление funtion stricmp() (а также strnicmp()), когда я пытаюсь скомпилировать его с C99. Например, простой код ниже дает мне это предупреждение.C99 удалить stricmp() и strnicmp()?
#include<string.h>
#include<stdio.h>
char arr[100]="hello";
char arr2[100]="hEllo";
int main()
{
int n=-1;
printf("%d\n",n);
n=strnicmp(arr,arr2,3); // the same when use the function stricmp();
printf("%d\n",n);
getchar();
return 0;
}
Когда я пытаюсь скомпилировать этот кусок кода против C99 (gcc -Wall -std=c99 main.c -o main
), я понимаю, что предупреждение. Но когда я скомпилирую его без -std=c99
, никаких предупреждений не будет. Однако, несмотря на то, что есть предупреждение о неявной декларации, мой код все еще работает правильно.
Почему? Это ошибка? Если не ошибка, то какова именно смена C99, которая делает это предупреждение?
try '-std = gnu99' –
Эти функции имеют * никогда не было в стандарте C, на самом деле в стандарте C нет функций сравнения строк без учета регистра. Функции 'stricmp',' strcasecmp' и т. Д. Являются всеми расширениями или определяются другими стандартами (POSIX, WIndows и т. Д.) –
См. [G ++ error: «stricmp» не был объявлен в этой области (но ОК для «strcmp») ] (http://stackoverflow.com/q/1784767/1708801) –