我想知道执行以下迭代来查找数组中第一次出现的 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