0

我有两个不同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),因为它对我的用例来说太慢了。

4

2 回答 2

2

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

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

于 2019-07-11T13:31:41.167 回答
1

对于 的特定情况strncmp,您可以自己实现比较函数以返回所需的结果,例如:

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

(当然,如果您对字符串长度有其他需求,最好按照建议预先计算并存储它。)

于 2019-07-11T14:17:04.707 回答