gpt4 book ai didi

c - 什么是测试零长度字符串 : `strlen(str) > 0` or `*str` 的有效方法

转载 作者:行者123 更新时间:2023-12-05 08:22:00 25 4
gpt4 key购买 nike

假设 char *str;,按照以下方法测试空字符串是否有效

/* Approrach 1 */
if (str && strlen(str) > 0) {
...
}

/* Approach 2 */
if (str && *str) {
...
}

什么是最可取的?我假设 second 会更快,因为它不必遍历缓冲区来获取长度。还有使用第二个的任何失败吗?

最佳答案

我会给出我认为更好的第三个选项:

if (str && str[0]) {
// ...
}

strlen 方法并不理想,因为它可以遍历非零长度的字符串。编译器可能会完全优化该调用(正如已经指出的那样),但它不会在每个编译器上运行(并且我假设 -ffreestanding 选项会禁用此优化),它至少使看起来需要做更多的工作。

但是,我认为 [0] 的意图比 * 更清晰。我通常建议在取消引用指向单个对象的指针时使用 *,并在该指针指向数组的第一个元素时使用 [0]


为了更清楚,你可以这样做:

if (str && str[0] != '\0') {
// ...
}

但这开始使特殊字符与字母数字字符的比例变得难以阅读。

关于c - 什么是测试零长度字符串 : `strlen(str) > 0` or `*str` 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67125392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com