4

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

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

但这不起作用。

- - 编辑 - -

好的,我理解反对意见。我太快发布问题了。并没有意识到 pid 返回一个 int,我不能将一个 int 转换为 char*

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

我就是这样做的。

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

2 回答 2

8

与其使用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

于 2013-03-07T03:06:52.083 回答
1

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

于 2013-03-07T03:10:53.777 回答