2013-11-26 89 views
2

我想查找字符串中的最後一次出現的字符串(它不是以NULL結尾的)。 搜索到的子字符串總是4個字母。這是我嘗試過的:查找字符串的最後一次出現

char * strrstr(char *string, char *find, ssize_t len) 
{ 
    //I see the find in string when i print it 
    printf("%s", string); 
    char *cp; 
    for (cp = string + len - 4; cp >= string; cp--) 
    { 
    if (strncmp(cp, find, 4) == 0) 
     return cp; 
    } 
    return NULL; 
} 

儘管我看到子字符串,我在字符串參數中查找,但它始終給我NULL。

+2

你能舉個例子'main'與數據調用此給出錯誤的結果? – interjay

+2

如果'string'沒有終止(嚴格地說,因此實際上並不是一個字符串,在C中),你真的不能像這樣printf()。 – unwind

+0

@interjay找到原因。字符串是5k的malloc'ated。我一直只檢查第一個字節。 – MaMu

回答

1

我想你的代碼,以這種方式和它的作品成功

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

char * strrstr(char *string, char *find, ssize_t len) 
{ 
    //I see the find in string when i print it 
    //printf("%s", string); 
    char *cp; 
    for (cp = string + len - 4; cp >= string; cp--) 
    { 
    if (strncmp(cp, find, 4) == 0) 
     return cp; 
    } 
    return NULL; 
} 

int main() { 
    char *ret = strrstr("kallelkallelkallelkallaa", "kall", 23); 
    printf("%s", ret); //---> it prints: kallaa 
    return 0; 
} 
+0

你有意將「strlen(」kallelkallelkallelkallaa「) - 1'作爲第三個參數嗎? – alk

+0

如果'needle'字符數組在'haystack'的最後,則發佈的答案將無法找到最後一次出現的'needle' I.E. strrstr()的第三個參數需要是調用strlen()的返回值, – user3629249

相關問題