我想读取客户端请求的线程数。所以如果有人像我这样运行我的程序:
./test 2
我必须读取等于2的线程数。我尝试getchar()
但它不起作用。有什么想法吗?
答案 0 :(得分:4)
这是一个包含完整,正确的错误检查和诊断消息的最小示例。请注意,将errno
设置为0是区分范围错误和有效strtoul()
输出所必需的,这是一个令人讨厌的函数怪癖。
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[])
{
if (argc != 2) {
fputs("usage: test NTHREAD\n", stderr);
exit(1);
}
char *e;
errno = 0;
unsigned long nthread = strtoul(argv[1], &e, 0);
if (!*argv[1] || *e) {
fputs("error: invalid NTHREAD\n", stderr);
exit(1);
}
if (nthread == (unsigned long) -1 && errno == ERANGE) {
fputs("error: NTHREAD out of range\n", stderr);
exit(1);
}
// Your code goes here
}
答案 1 :(得分:3)
这与线程本身无关。
您的程序的第一个参数(如果给出)将在argv[1]
中找到,但作为字符串,因此您需要将其转换为类似atoi
或strtol
的整数
答案 2 :(得分:2)
int main(int argc, int **argv)
使用main
的参数,您应该知道第一个参数argv[0]
是当前正在执行的文件的名称,以下参数是发送到您的程序的参数。
在您的情况下,您必须阅读argv[1]
。
始终检查argc
以计算输入的参数。