将 pid_t 转换为字符串

标签 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);

我假设我的错误可能是我最后没有添加 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/

相关文章:

c - C 中的单链表

c - 如何使用 C 在 Windows 7 上以编程方式设置 IP 地址

c - 这个错误是什么意思: `somefile.c:200: error: the frame size of 1032 bytes is larger than 1024 bytes` ?

c# - 在 C# 中对 URI 的字符串操作

c# - 有没有办法在 .net 中动态执行字符串,类似于 javascript 中的 eval() 或 sql 中的动态 sql?

c - 如何在 Ubuntu 上解决错误消息 "gcc‬: command not found"(仅带参数)

ios - 如何从 Swift 字符串中选择大写字母?

makefile - 如何在 Makefile 中获取我的 make 命令的 pid?

c++ - 以编程方式获取与 htop 的相应 pid 匹配的进程的线程 Id

perl - 从 perl 脚本中杀死一个进程