我对Java很有经验,但我对C很陌生,我是在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]
中。我的最终目标不仅仅是打印出来。 最佳答案
简单解决方案:
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
。这并不难,但你必须理解瓦拉格斯。asprintf
非常有用,而且它早就应该在C标准库中了。编辑:我最初建议强制转换为
long
,但这是不正确的,因为POSIX不能保证apid_t
值适合along
。改为使用intmax_t
(包括<stdint.h>
以访问该类型)。关于c - 如何在C中的字符串中添加pid_t,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7600304/