2012-07-25 35 views

回答

1

字符在默認情況下在MSVC中被簽名,默認情況下在NDK上的GCC中沒有簽名。要改變這種狀況,以下行添加到Android.mk:

LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS) -fsigned-char 

這可能Ç打破庫函數使用字符參數,如strchr。問題是他們將該字符視爲int,並且如果char爲負數/超過0x7F,則將char擴展爲int的規則會隨編譯器設置而變化。使用帶符號字符設置時,負char值將1位擴展爲負整數,使用無符號字符將它們擴展爲0位,即低於256的正整數。庫預計後者。

我結束了在我的項目像這樣重新定義strchr

// In the common header 
extern char *strchr_sb(const char *s, int c); 
#define strchr strchr_sb 

// Elsewhere 
#undef strchr 
char *strchr_sb(const char *s, int c) 
{ 
    return strchr(s, c & 0xff); 
} 
+0

我寫了以下內容:「字符CH =將0xEB,性病::字符串s; s.find(ch,0)'。在這裏,char是否爲負數或C++是沒有關係的。 'std :: string :: find(char ch,pos)'的接口需要一個字符。 – nature1729 2012-07-25 18:59:41

+1

你寫的方式,字符串's'是空的。你爲什麼期望在那裏找到角色? – 2012-07-25 19:00:48

+0

's'填入了包含0xEB的數據。儘管沒有這樣的代碼。 – nature1729 2012-07-25 19:02:54

相關問題