如何将pid_t转换为字符串

时间:2013-03-07 03:03:46

标签: c pid

所以,我需要strcat pid到一些字符串。 我有这个

strcat (str,(char*)getpid());

但这不起作用。

---- ----编辑

好的,我明白了downvotes。我太快发表了一个问题。并没有意识到pid返回一个int,我不能将一个int转换为char *

itoa不起作用,因为它不是标准的。

这就是我做到的。

char pid[10];
snprintf(pid, 10,"%d",(int)getpid());
strcat (str, pid); 

2 个答案:

答案 0 :(得分:6)

不要使用strcat来构建字符串,而是考虑使用更灵活(更有效!)sprintf / snprintf函数:

char *end = str;
end += sprintf(end, "%s ", "hello!");
end += sprintf(end, "%ld", (long)getpid());
if(bar)
    end += sprintf(end, "%x", 0xf00d);

注意sprintf返回写入的字符数,因此您可以构建一个字符串而不会屈服于Schlemiel the Painter's algorithm。如果你想确保不会超出固定大小的缓冲区,snprintf会为你做这个(strcat只会盲目地连接,并且没有标准的方法可以避免这种情况。)< / p>

请注意,pid_t standard保证存在“pid_t ...的[宽度]不大于long类型宽度的一个或多个编程环境” 。因此,只要pid_t这样说,就可以将long投放到getconf是安全的。

答案 1 :(得分:1)

我看到几个引用提到转换为long,然后使用sprintf的%ld格式说明符:sprintf(str + strlen(str), "%ld", (long) getpid());