簡單的解決方案:
printf("Message: %jd is the child's process id.", (intmax_t)cpid);
沒那麼容易,但也不算太複雜的解決方案:使用(非便攜式)asprintf
功能:
asprintf(&msg[1], "%jd is the child's process id.", (intmax_t)cpid);
// check if msg[1] is not NULL, handle error if it is
如果您的平臺沒有asprintf
,您可以使用snprintf
:
const size_t MSGLEN = sizeof(" is the child's process id.") + 10; // arbitrary
msg[1] = malloc(MSGLEN);
// handle error if msg[1] == NULL
if (snprintf(msg[1], MSGLEN, "%jd is the child's process id.", (intmax_t)cpid)
> MSGLEN)
// not enough space to hold the PID; unlikely, but possible,
// so handle the error
或根據snprintf
定義asprintf
。這不是很難,但你必須瞭解可變參數。 asprintf
是非常有用它應該早在C標準庫。
編輯:我本來建議鑄造long
,但由於POSIX並不能保證一個pid_t
值在long
符合這是不正確的。改爲使用intmax_t
(包括<stdint.h>
以獲得該類型的訪問權限)。
請使用「格式代碼」工具欄按鈕格式化代碼。我爲你修好了。 – rubenvb