" 返回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;
}
答案 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
。