我在Java方面经验丰富,但我
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 :(得分: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>
来访问该类型)。