繁体   English   中英

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

[英]What does “return p ? memcpy(p, s, len) : NULL;” mean?

在下面的代码中,“ return 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;
}

该语法称为三元运算符,您可以将其视为简化的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。

这意味着执行并返回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。

这是C语言中的三元运算符。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM