سؤال

كنت أتساءل عما إذا كان من الآمن القيام بالتكرار التالي للعثور على الحدوث الأول لـ 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