所以我有这个程序接收PID输入和一个字符。
$ ./transmit 1111 a
我的问题是。如果是
$ ./transmit 111a x
因为PID是我需要记住的所有数字。
下式给出:
char *a[] = {"./transmit", "111a", "x"};
我如何检查“111a”是否只是数字? isdigit只有在它是一个角色时才有效。我是否必须遍历整个输入?
答案 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_MAX
和errno == 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;
}