我对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/

10-11 21:58