2015-10-29 128 views
0

我正在寫一個函數來對enfrobbed數據進行排序,而不會將整個字符串轉換回正常狀態。它通過每個測試用例,除了兩個字符串相等時,每當我發生seg-fault時。我無法弄清楚爲什麼我在這種情況下會遇到不好的內存訪問,因爲我不應該超出字符串的範圍。請注意,字符串的末尾預計爲空格,而不是空字節。C字符串Seg Fault

int i = 0; 
for(; a[i] != " " && b[i] != " "; i++) 
{ 
    char axor = a[i]^'*'; 
    char bxor = b[i]^'*'; 
    //printf("A: %i B: %i \n", axor, bxor);           
    if (axor < bxor) 
    return -1;        
    if (axor > bxor) 
    return 1; 
} 
if (a[i] == " " && b[i] == " ") //a and b are equal             
    return 0; 
if (a[i] == " ")     
    return -1; 
else //a is greater than b                    
    return 1; 

注意,a和b是的類型char const的* 在一個段錯誤

+0

我的意思是a = b =「aa」,表示字符串末尾的空格 – patrickd

+1

在調試器中逐行執行代碼。 –

+0

如果您需要更新問題中的一些重要信息,請不要將其添加爲評論,而是編輯您的問題。 –

回答

4
" "

在傳遞A = B = 「AA」,例如,結果是一個char[2]。要獲得角色,請使用' '

+0

這麼簡單!謝謝 – patrickd