итерация массива strstr в c
Вопрос
Мне было интересно, безопасно ли выполнять следующую итерацию, чтобы найти первое вхождение 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;
}
Решение
Да, это «безопасно» в том смысле, что приведенный выше код будет работать, и нет простого способа его взломать.
Однако небольшое исправление было бы более надежным:
- Возвращаться
const char*
отc()
чтобы вызывающая сторона не могла изменять результирующие строки.Все эти строки постоянны. - Вместо магического числа
5
, который станет недействительным, если массив изменится, используйтеsizeof(list)/sizeof(list[0])
для вычисления количества элементов в списке.
Не связан с StackOverflow