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/