c - 此语句中使用了无意义的三元运算符

标签 c

gcc 4.7.2
c89

你好,

我有这个函数,它将一个指针分配给另一个指针,该指针是字符串结构的一个元素。

这个字符串结构的目的是获取和设置实际字符串的长度。

但是,我不明白他们为什么使用三元运算符。这对我来说没有意义。除了 str->len = src 之外似乎没有其他条件。它只分配而不比较任何东西。

typedef struct tag_str_t str_t;
struct tag_str_t {
    char *buf;
    size_t len;
};

static void string_set(str_t *str, const char *src)
{
    str->buf = (char*)src;
    str->len = src ? strlen(src) : 0;
}

这样做会不会更简单、更易读?

str->len = strlen(src);

非常感谢您的任何建议,

最佳答案

代码:

str->len = src ? strlen(src) : 0;

相当于:

str->len = ((src != 0) ? strlen(src) : 0);

我添加了圆括号和额外的表达式来指示表达式的组件所在的位置。您的评论似乎表明您认为 str->len = src 是三元运算符中的条件,但这是错误的;分配的优先级非常低。

作为Jesus Ramos还有explained ,测试的目的是确保不会使用 NULL 指针调用 strlen(),这会导致崩溃。

关于c - 此语句中使用了无意义的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14353271/

相关文章:

c - 这个makefile有什么作用?

c - 为什么 "int i;"的位置在这种情况下很重要?

c - read() 系统调用会复制数据而不是传递引用

c - borland C 中的 mkdir() 和 fopen()

c - bluez 适配器 api StartDiscovery 超时

c - 计算 C 中结构的大小(数据对齐问题)

c - 使用 recv 通过网络接收字符串

c++ - 在 C++ 应用程序中使用 boost 的问题

CC110L 拒绝包裹 - 只有重置有帮助

mysql - 循环遍历数据库表并比较用户输入