簡體   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