什么"返回p? memcpy(p,s,len):NULL;"意思?

时间:2014-07-29 18:10:55

标签: c ternary-operator conditional-operator

" 返回p是什么意思? memcpy(p,s,len):NULL; "在下面的代码? (更一般地说,条件运算符是什么,a ? b : c?)

char * strdup(const char * s)
{
  size_t len = 1+strlen(s);
  char *p = malloc(len);

  return p ? memcpy(p, s, len) : NULL;
}

3 个答案:

答案 0 :(得分:6)

此语法称为三元运算符,您可以将其视为简化的if语句。 return p ? memcpy(p, s, len) : NULL;与以下内容相同:

if(p)
    return memcpy(p, s, len);
else
    return NULL;

memcpy()函数返回一个指向dest的指针,这是memcpy的第一个参数,在你的情况下,这是p。因此,如果p的值不等于0(指针不为NULL),则返回该指针。否则,返回NULL。

答案 1 :(得分:5)

这意味着执行并返回memcpy(p, s, len),除非p==0。如果p==0,则会返回NULL,而不会执行memcpy(p, s, len)

阅读https://en.wikipedia.org/wiki/%3F:#C了解更多信息。

另外,用http://man7.org/linux/man-pages/man3/memcpy.3.html来解释: memcpy()函数将len个字节从内存区域p复制到内存区域s。内存区域不得重叠。

也就是说,如果我们有以下记忆:

   p            s
[][1][2][3][][][4][5][6][]

和len == 3,然后当调用memcpy时,我们得到:

   p            s
[][1][2][3][][][1][2][3][]

最后,函数返回的值是它在表达式中使用它时计算的值;如果foo()返回5,则print(foo());会打印5。

答案 2 :(得分:4)

这是C中的三元运算符。

p ? memcpy(p, s, len) : NULL;

这意味着如果第一个条件为真,即p,则返回memcpy(p, s, len)的值,否则返回NULL