C 如何读取程序参数

C 如何读取程序参数,c,C,我想读取客户端请求的线程数。如果有人像这样运行我的程序: ./test 2 我必须读取等于2的线程数。我尝试了getchar(),但它不起作用。有什么想法吗?这里是一个简单的示例,包含完整、正确的错误检查和诊断消息。请注意,将errno设置为0对于区分有效strtoul()输出的范围错误是必要的,这是函数的一个恼人的怪癖 #include <stdlib.h> #include <stdio.h> #include <errno.h> int main(in

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

./test 2

我必须读取等于2的线程数。我尝试了
getchar()
,但它不起作用。有什么想法吗?

这里是一个简单的示例,包含完整、正确的错误检查和诊断消息。请注意,将
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
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
如果(argc!=2){
fputs(“用法:test-NTHREAD\n”,stderr);
出口(1);
}
char*e;
errno=0;
无符号长n读取=strtoul(argv[1],&e,0);
if(!*argv[1]| |*e){
fputs(“错误:无效的NTHREAD\n”,stderr);
出口(1);
}
if(nthread==(无符号长)-1&&errno==ERANGE){
fputs(“错误:NTHREAD超出范围\n”,stderr);
出口(1);
}
//你的密码在这里
}

这里是一个简单的示例,包含完整、正确的错误检查和诊断消息。请注意,将
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
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
如果(argc!=2){
fputs(“用法:test-NTHREAD\n”,stderr);
出口(1);
}
char*e;
errno=0;
无符号长n读取=strtoul(argv[1],&e,0);
if(!*argv[1]| |*e){
fputs(“错误:无效的NTHREAD\n”,stderr);
出口(1);
}
if(nthread==(无符号长)-1&&errno==ERANGE){
fputs(“错误:NTHREAD超出范围\n”,stderr);
出口(1);
}
//你的密码在这里
}
int main(int argc,int**argv)

使用
main
的参数,您应该知道第一个参数
argv[0]
是当前执行文件的名称,以下参数是发送到程序的参数

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

始终选中
argc
以计算输入的参数。

intmain(intargc,int**argv)

使用
main
的参数,您应该知道第一个参数
argv[0]
是当前执行文件的名称,以下参数是发送到程序的参数

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


始终选中argc以计算输入的参数。

这与线程本身无关


程序的第一个参数(如果给定)将在
argv[1]
中找到,但作为字符串,因此需要将其转换为一个整数,类似于
atoi
strtol

这与线程本身无关



程序的第一个参数(如果给定)将在
argv[1]
中找到,但作为一个字符串,因此需要将其转换为类似
atoi
strtol

的整数。在本例中,2作为参数传递给程序。尝试搜索有关C程序中处理参数的信息。我有一个主意-至少阅读一些关于C编程的书籍…我尝试了argv[0],但它无法读取“2”。签出
argv[0]
始终包含命令调用的程序名。因此,第一个实数参数存储在
argv[1]
中。但你必须检查这样的论点是否存在。为此,只需阅读
argc
,它会告诉您
argv
所指向的元素数。在您的情况下,它应该等于2。在本例中,2作为参数传递给程序。尝试搜索有关C程序中处理参数的信息。我有一个主意-至少阅读一些关于C编程的书籍…我尝试了argv[0],但它无法读取“2”。签出
argv[0]
始终包含命令调用的程序名。因此,第一个实数参数存储在
argv[1]
中。但你必须检查这样的论点是否存在。为此,只需阅读
argc
,它会告诉您
argv
所指向的元素数。在您的情况下,它应该等于2。errno一开始不是零吗?@paxdiablo:I放入
errno=0
,以便允许将代码块复制并粘贴到不保证前提条件
errno==0
的部分。这也意味着人们阅读代码不必检查周围的代码来验证前提条件。公平点,这是有意义的。也许我误解了,但是我不认为这是有效的C(虽然它对于C++样本可能是好的),因为C要求所有变量声明都出现在任何代码之前。(因此,
*e
nthread
的声明将导致错误)…@neilr8133:您指的是C标准的一个过时版本。C标准自1999年以来就允许这样的声明,而且编译器对该功能的广泛支持早于此。errno一开始不是零吗?@paxdiablo:I put
errno=0
,以便允许复制代码块并将其粘贴到节中前提条件是代码“代码> ErnOn==0 < /COD>不能保证。这也意味着人们阅读代码不必检查周围的代码来验证前提条件。公平点,这是有道理的。也许我误解了,但是我不认为这是有效的C(虽然C++的样本可能是可以的)。因为C要求所有变量声明出现在任何代码之前(因此
*e
nthread
的声明将导致错误)…@neilr8133:您指的是C标准的一个过时版本。C标准自1999年以来就允许这样的声明,而且编译器对该功能的广泛支持比这还要早。