1:snprintf( buf, sizeof(buf),
2: "%s exe=%s hostname=%s addr=%s terminal=%s res=%s",
3: message, exename,
4: hostname ? hostname : "?",
5: addrbuf,
6: tty ? tty : "?",
7: success
);
在上面的第6行代码中,“?”是什么?表示(不是三元运算符)
tty : tty : "?"
是什么意思?
答案 0 :(得分:5)
第6行,
tty ? tty : "?"
第一个?是三元运算符。第二个用引号引起来的是长度为1(一个字符加一个空终止符)的字符串中的问号字符。
因此,该行表示如果tty不为null,则使用tty,否则使用字符串“?”。
答案 1 :(得分:0)
如果tty
是NULL
,snprintf()
将输出字符串"?"
(一个字符),而不是如果您坚持使用UB tty
。
char *tty = NULL;
printf("%s", tty); // UB
printf("%s", "?"); // print a 1-character string
printf("%s", tty?tty:"?"); // print tty's value or ?