Frage

Ich frage mich, ob es sicher ist, die folgende Iteration zu tun das erste Vorkommen von str innerhalb des Arrays zu finden, oder wenn es ein besserer Weg. Dank

#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;
}
War es hilfreich?

Lösung

Ja, es ist „sicher“ in dem Sinne, dass der obige Code funktioniert und es gibt keine einfache Möglichkeit, es zu brechen.

Ein wenig fix-up wäre aber robuster:

  1. Zurück const char* von c() so dass der Anrufer die resultierenden Strings nicht ändern können. Alle diese Strings sind konstant.
  2. Anstelle der magischen Zahl 5, die ungültig werden würde, wenn das Array geändert, Verwendung sizeof(list)/sizeof(list[0]) die Anzahl der Elemente in der Liste zu berechnen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top