所以,我需要strcat pid到一些字符串。 我有这个
strcat (str,(char*)getpid());
但这不起作用。
---- ----编辑
好的,我明白了downvotes。我太快发表了一个问题。并没有意识到pid返回一个int,我不能将一个int转换为char *
itoa不起作用,因为它不是标准的。
这就是我做到的。
char pid[10];
snprintf(pid, 10,"%d",(int)getpid());
strcat (str, pid);
答案 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());