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