所以,我需要 strcat pid 到某个字符串。我有这个
strcat (str,(char*)getpid());
但这不起作用。
- - 编辑 - -
好的,我理解反对意见。我太快发布问题了。并没有意识到 pid 返回一个 int,我不能将一个 int 转换为 char*
itoa 不起作用,因为它不是标准的 c。
我就是这样做的。
char pid[10];
snprintf(pid, 10,"%d",(int)getpid());
strcat (str, pid);
与其使用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 的算法。如果您想确保不会超出固定大小的缓冲区,snprintf将为您执行此操作(strcat只会盲目连接,并且没有标准方法可以避免这种情况)。
请注意,该pid_t标准保证存在“一个或多个编程环境,其中pid_t... 的 [width] 不大于 type 的宽度long”。因此,只要这么说,铸就pid_t是安全的。longgetconf
我看到几个引用提到转换为 long,然后使用%ldsprintf 的格式说明符:sprintf(str + strlen(str), "%ld", (long) getpid());