2011-05-07 120 views
6

我想创建一个方法来查找并替换字符串中的字符串,但我似乎在编译时有一些错误。我可以帮助弄清楚发生了什么事吗?未定义的引用stricmp

void replaceString(char *find, char *replace) 
{ 
    int len_string,i; 
    char temp[30]; 
    len_string=strlen(find); 
    while(1) 
    { 
     for(i=0;i<len_string;i++) temp[i]=fgetc(edit); 
      temp[i+1]=NULL; 
     /* the stricmp() is used for comparing both string. */ 
     if(stricmp(find,temp)==0) 
     { 
      fprintf(edit,"%s ",replace); 
      fclose(edit); 
      exit(1); 
     } 
     fseek(edit,-(len_string-1),1); 
    }  
} 

我在编译时得到的错误是对stricmp的未定义引用。 我知道这是不正确的编码约定,但编辑(FILE类型的对象)当前是一个全局变量。

回答

22

stricmp是Windows特有的。如果你不在Windows上,strcasecmp

+6

不仅针对Windows,而且针对微软的编译器/库。我不认为你会在Windows的其他编译器中找到它。 – metamatt 2011-05-07 02:24:02

+1

感谢您的帮助 – Jonathan 2011-05-17 03:03:34

+0

Borland Turbo C也提供了此功能。 – 2013-02-14 20:47:34

2

实际上,错误是在链接时,而不是在编译时。你的代码被编译成一个目标文件,期望在与其它无法找到的目标文件链接时找到stricmp的实现。因此错误:“未定义的参考stricmp”。正如bmargulies指出的那样,该实现仅在Windows库中可用。如果你在POSIX兼容系统上,你可以切换到strcasecmp()。