итерация массива strstr в c - PullRequest
1 голос
/ 30 марта 2010

Мне было интересно, безопасно ли выполнять следующую итерацию, чтобы найти первое вхождение 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;
}

1 Ответ

5 голосов
/ 30 марта 2010

Да, это "безопасно" в том смысле, что приведенный выше код будет работать, и нет простого способа его сломать.

Небольшое исправление будет более надежным:

  1. Возвращает const char* из c(), чтобы вызывающая сторона не могла изменить результирующие строки. Все эти строки постоянны.
  2. Вместо магического числа 5, которое станет недействительным при изменении массива, используйте sizeof(list)/sizeof(list[0]) для вычисления количества элементов в списке.
...