2011-09-04 124 views
0

有人有此功能的源代碼嗎?我認爲它在Unix下可用,但我使用的是Windows。strncasecmp()函數的源代碼


當然我試圖谷歌第一,但還沒有找到解決方案,還起到從「strncasecmp.c」需要的僅2而不是3個參數。

無法提供更多信息,因爲它不是我的代碼。

那就是他如何使用它:

int _tcsnicmp(const char *c1, const char *c2, int l) { return strncasecmp(c1,c2,l); } 
+0

...搜索 「strncasecmp.c」 – Mat

+2

'strncasecmp'是'C'功能,不'C++'。請嘗試更適當的標籤。 –

回答

5

編輯後你更新你的問題,它看起來像你從什麼做一個補丁包,即原來是爲Windows編寫的,而不是移植到UNIX,現在回到Windows?! _tcsnicmp實際上是在Windows上調用的函數(請參閱上面的鏈接)。在Windows上重定向到strncasecmp(或您自己的版本)沒有任何意義。

在Windows下(至少使用微軟編譯器,這個平臺並不是真正的問題),你可以使用strnicmp family of functions來代替。如果您仍然需要源代碼,可以使用google代碼,就像其他人所建議的一樣,或者查看隨Visual Studio一起分發並安裝在「\ VC \ crt \ src」下的CRT源代碼。

2

我發現它here

#include <string.h> 
#include <ctype.h> 

int 
_DEFUN (strncasecmp, (s1, s2, n), 
    _CONST char *s1 _AND 
    _CONST char *s2 _AND 
    size_t n) 
{ 
    if (n == 0) 
    return 0; 

    while (n-- != 0 && tolower(*s1) == tolower(*s2)) 
    { 
     if (n == 0 || *s1 == '\0' || *s2 == '\0') 
    break; 
     s1++; 
     s2++; 
    } 

    return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2); 
} 
0

如果安裝了Visual C++,CRT源代碼位於安裝目錄中。

下面這個目錄:(路徑到Visual Studio安裝)\ VC \ CRT \ SRC

看看這個目錄中(所有* cmp.c文件如wcsnicmp.c,strnicmp.c等。 ..)

4
#define strncasecmp(x,y,z) _strnicmp(x,y,z) 
+2

請說明您的代碼的作用以及它如何回答問題。如果你得到一個代碼片段作爲答案,你可能不知道如何處理它。回答應該給OP和未來訪問者指導如何調試和解決他們的問題。指出你的代碼背後的想法,對於理解這個問題以及應用或修改你的解決方案有很大的幫助。 – Palec