Вопрос

Мне было интересно, безопасно ли выполнять следующую итерацию, чтобы найти первое вхождение 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. Возвращаться const char* от c() чтобы вызывающая сторона не могла изменять результирующие строки.Все эти строки постоянны.
  2. Вместо магического числа 5, который станет недействительным, если массив изменится, используйте sizeof(list)/sizeof(list[0]) для вычисления количества элементов в списке.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top