不用strlen判断哪个char *最短

Determine which char * is the shortest without strlen

我有两个不同的 char *char *string1 是不变的,char *string2 是可以改变的。我从列表中检索 char *string2

我想找到最短的长度 char * 以将其用于:

strncmp(string1, string2, shortest);

这将在一个 while 循环中进行,如下所示:

...
int shortest;
while (string2) {
    // get the length of the shortest char *
    if (!strncmp(string1, string2, shortest))
        break;    
    string2 = list_next(list); // Returns NULL if there is no elements left
}
...

我无法使用 strlen(const char *s),因为它对我的用例来说太慢了。

创建一个包含指针和长度的结构。然后你有预先计算的长度并检查它应该很快。

一个更好的主意是使用已经为您完成此操作的其他人的字符串库。除了计算字符串长度之外,大多数库极大地通过避免标准字符串操作来提高 C 的缓冲区安全性。

对于strncmp的具体情况,您可以自己实现比较功能return想要的结果,例如:

bool strprefixeq(const char *a, const char *b) {
    while (*a && *b) {
        if (*a++ != *b++) {
            return false;
        }
    }
    return true;
}

(当然如果你对字符串长度有其他需求的话,最好按照建议预先计算保存)