将 pid_t 转换为字符串

wol*_*ine 5 c string pid

我正在尝试将 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);
Run Code Online (Sandbox Code Playgroud)

我认为我的错误可能是我最后没有添加 NULL。我尝试这样做,但仍然收到错误消息。有人可以解释一下将 PID 转换为 char * (“string”) 的最佳方法是什么吗?谢谢!!

dbu*_*ush 7

sizeof(int)在您的系统上很可能是 4 个字节。包含 PID 的字符串将需要(假设 16 位 PID)至少 6 个字节:5 个用于十进制数字,1 个用于空终止符。因此,您没有分配足够的空间,并且可能会超出分配的数组的末尾。这会调用未定义的行为

确保为相关字符串分配足够的空间:

int pid = getpid();
char * mypid = malloc(6);   // ex. 34567
sprintf(mypid, "%d", pid);
Run Code Online (Sandbox Code Playgroud)

或者使用固定大小的字符串:

int pid = getpid();
char mypid[6];   // ex. 34567
sprintf(mypid, "%d", pid);
Run Code Online (Sandbox Code Playgroud)

如果您的系统支持 32 位 PID,则至少需要 11 个字节。对于 64 位 PID,至少为 21。