2010-03-29 57 views
1

我想知道是否可以安全地進行下面的迭代以在數組中找到str的第一個匹配項,或者是否有更好的方法。由於c中的數組迭代strstr

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

const char * list[] = {"One","Two","Three","Four","Five"}; 

char *c(char * str) { 
    int i; 
    for (i = 0; i < 5; i++) { 
     if (strstr(str, list[i]) != NULL) return list[i]; 
    } 
    return "Not Found"; 
} 
int main() { 
    char str[] = "This is a simple string of hshhs wo a char"; 

    printf("%s", c(str)); 
    return 0; 
} 

回答

5

是的,它是在這個意義上的「安全」,上面的代碼將工作,有沒有簡單的方法來打破它。

一點點修復,但是向上會比較穩健:

  1. 返回const char*c(),使主叫方不能修改生成的字符串。所有這些字符串是不變的。
  2. 而不是神奇數字5,如果數組更改將變爲無效,請使用sizeof(list)/sizeof(list[0])來計算列表中元素的數量。