1

配列内で最初に出現するstrを見つけるために次の反復を実行しても安全かどうか、またはより良い方法があるかどうか疑問に思いました。ありがとう

#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;
}
4

1 に答える 1

5

はい、上記のコードが機能し、それを破る簡単な方法がないという意味で「安全」です。

ただし、少し修正すると、より堅牢になります。

  1. const char*呼び出し元が結果の文字列をc()変更できないように戻ります。これらの文字列はすべて定数です。
  2. 5配列が変更された場合に無効になるマジック ナンバーの代わりに、 を使用sizeof(list)/sizeof(list[0])してリスト内の要素数を計算します。
于 2010-03-29T23:42:12.610 に答える