2013-11-21 72 views
1

我想實現一個函數,該函數在全局變量中搜索第一次出現的傳入字符串。找到後,我希望它將匹配的字符作爲指針返回。實現字符串查找方法

然而,這不起作用:

警告:返回時將整數指針沒有施放[由 默認啓用]

char *find(const char *s) 
{ 
    int i = 0; 
    const char *ptr = s; 

    while(ptr[i]) 
    { 
     //wordList is a global struct with a string 
     if(ptr[i] == wordList->search[0]) 
     { 
      return ptr[i]; 
     } 
     else i+=1; 
    } 

    return NULL; 
} 
+1

您還沒有驗證兩個字符串做這個'PTR [I] ==詞表相同的返回類型 - >搜索[0]',但只有每個字符串的第一個字符 – fvdalcin

+0

在需要傳遞一個指針數組時,你的意思是? – BLUEPIXY

回答

1

ptr[i]char類型。您需要返回來自函數的指針char,因爲其返回類型爲char *。使用

return &ptr[i]; 

正如 Bit Fiddling Code Monkey指出在他的評論中,更好地改變你的函數

const char *find(const char *s) { ... } 
+1

'return(char *)&ptr [i];'應該刪除@IMX正在獲取的警告。 –

+0

@BitFiddlingCodeMonkey;是。但它也有一些坑和瀑布。 – haccks

+1

將函數頭改爲'const char * find(const char * s)'會更好,我估計。 –

3

要返回&ptr[i] - 你代碼正在將發現的字符的值返回給指針。

此外,您正在採取const char*並返回char * - 您應該修復此問題 - 更改退貨類型或sptr。此外,您不需要ptr - 您可以直接完成全部引用s

哦,如果你堅持與consts,我們正在挑剔,那麼它也許應該是const char* const s

+0

'警告:從指針目標類型[默認啓用]返回丟棄'const'限定符' – IMX

+1

@IMX嘗試:'return(char *)ptr' –

+0

拋棄const是令人討厭的,並且通常意味着您的簽名錯誤就像這種情況一樣)。 –