如何在c中的字符串中添加pid_t

时间:2011-09-29 16:17:34

标签: c arrays char fork pid

我在Java方面经验丰富,但我 非常。我正在Ubuntu上写这篇文章。 说我有:

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]中。我的最终目标不仅仅是打印它。

1 个答案:

答案 0 :(得分: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

或根据asprintf定义snprintf。这不是很难,但你必须了解varargs。 asprintf 非常非常有用,它应该早在C标准库中。

编辑:我最初建议转换为long,但这不正确,因为POSIX不保证pid_t值适合long }。请改用intmax_t(包括<stdint.h>来访问该类型)。