2011-09-29 38 views
1

我在Java中有經驗,但我是非常新的C.我在Ubuntu上寫這個。 說我有:如何將pid_t添加到字符串中c

char *msg1[1028]; 
pid_t cpid; 
cpid = fork(); 

msg1[1] = " is the child's process id."; 

我如何可以連接MSG1 [1]以這樣的方式,當我打電話:

printf("Message: %s", msg1[1]); 

進程ID會顯示在前面「是孩子的過程ID。」?

我想存儲整個字符串在msg1[1]。我的最終目標不僅僅是印刷它。

+0

請使用「格式代碼」工具欄按鈕格式化代碼。我爲你修好了。 – rubenvb

回答

4

簡單的解決方案:

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>以獲得該類型的訪問權限)。

+1

我想將它存儲在msg1 [1]中,我的最終目標不僅僅是打印它。 –

+0

你可以使用snprintf。 –

+1

@Matt_Bro:請參閱最新的答案。 –