1

我想读取客户端请求的线程数。因此,如果有人像这样运行我的程序:

./test 2

我必须读取等于 2 的线程数。我尝试getchar()但它不起作用。任何的想法?

4

3 回答 3

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
}
于 2013-03-08T22:24:30.280 回答
3

这与线程本身无关。

如果给定程序的第一个参数,它将以argv[1]字符串形式出现,因此您需要将其转换为整数,例如atoior strtol

于 2013-03-08T22:26:07.153 回答
2

int main(int argc, int **argv)

使用参数main,你应该知道第一个参数argv[0]是当前正在执行的文件的名称,后面的参数是发送给你的程序的参数。

在您的情况下,您必须阅读argv[1].

始终检查argc以计算输入的参数。

于 2013-03-08T22:24:55.467 回答