有没有更好的方法来检查pid输入是否都是数字?

时间:2018-03-18 23:22:14

标签: c

所以我有这个程序接收PID输入和一个字符。

$ ./transmit 1111 a

我的问题是。如果是

$ ./transmit 111a x

因为PID是我需要记住的所有数字。

下式给出:

char *a[] = {"./transmit", "111a", "x"};

我如何检查“111a”是否只是数字? isdigit只有在它是一个角色时才有效。我是否必须遍历整个输入?

2 个答案:

答案 0 :(得分:4)

char *err;
unsigned long pid = strtoul(argv[1], &err, 10);

if (*err || err == argv[1])
    error();

if ((pid_t)pid != pid || (pid_t)pid <= 0)
    error();

当你真的很迂腐时,你也可以检查ULONG_MAXerrno == ERANGE,但因为pid_t小于unsigned long,所以第二次检查会收到已经

答案 1 :(得分:2)

您可以使用strspn()功能:

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[]) {
    if (argc > 1) {
        if (argv[1][strspn(argv[1], "0123456789")] == '\0') {
            puts("Yes, the first command line argument is all numeric.");
        }
        else {
            puts("No, the first command line argument is not all numeric.");
        }
    }
    else {
        puts("Please provide an argument on the command line");
    }
    return 0;
}