确定哪个char *是最短而没有strlen

时间:2019-07-11 13:28:16

标签: c strncmp

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

(当然,如果您还有其他需要的字符串长度,最好按照建议进行预先计算和存储。)