在下面的代码中,返回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;
}发布于 2014-07-29 18:13:31
它意味着执行并返回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复制到内存区域的。内存区域不能重叠。
也就是说,如果我们有以下记忆:
p s
[][1][2][3][][][4][5][6][]和len == 3,那么当调用memcpy时,我们得到:
p s
[][1][2][3][][][1][2][3][]最后,函数返回的值是它计算出来的值,如果在表达式中使用它;如果foo()返回5,则print(foo());打印5。
发布于 2014-07-29 18:13:51
这个语法被称为三元操作符,您可以认为它是简化的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。
发布于 2014-07-29 18:12:08
这是C中的一个三元算子。
p ? memcpy(p, s, len) : NULL;这意味着,如果第一个条件为真,即p,则返回memcpy(p, s, len) of的值,返回NULL。
https://stackoverflow.com/questions/25022164
复制相似问题