我正在尝试将 pid 转换为字符串。 我这样试过:
int pid = getpid(); //this int conversion should be ok as far as I know
char * mypid = (char *)malloc(sizeof(int));
sprintf(mypid, "%d", pid);
我假设我的错误可能是我最后没有添加 NULL。我试图这样做,但仍然收到错误消息。有人可以向我解释什么是将 PID 转换为 char * ("string") 的最佳方法吗?谢谢!!
最佳答案
sizeof(int)
在您的系统上很可能是 4 个字节。包含 PID 的字符串将需要(假设 16 位 PID)至少 6 个字节:5 个用于十进制数字,1 个用于空终止符。因此,您没有分配足够的空间并且可能写入已分配数组的末尾。这会调用 undefined behavior 。
确保为有问题的字符串分配足够的空间:
int pid = getpid();
char * mypid = malloc(6); // ex. 34567
sprintf(mypid, "%d", pid);
或者使用固定大小的字符串:
int pid = getpid();
char mypid[6]; // ex. 34567
sprintf(mypid, "%d", pid);
如果您的系统支持 32 位 PID,则至少需要 11 个字节。对于 64 位 PID,至少为 21。
关于将 pid_t 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230155/