我有两个不同的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)
,因为它对于我的用例来说太慢了。
答案 0 :(得分:2)
创建一个包含指针和长度的结构。然后,您已经预先计算了长度,并检查了长度是否应该很快。
一个更好的主意是使用已经为您完成此任务的其他人的字符串库。除了计算字符串长度以外,大多数库大大都通过避免标准的字符串操作来提高C的缓冲区安全性。
答案 1 :(得分:1)
对于strncmp
的特定情况,您可以自己实现比较功能以返回所需的结果,例如:
bool strprefixeq(const char *a, const char *b) {
while (*a && *b) {
if (*a++ != *b++) {
return false;
}
}
return true;
}
(当然,如果您还有其他需要的字符串长度,最好按照建议进行预先计算和存储。)