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 puterrno=0
,以便允许复制代码块并将其粘贴到节中前提条件是代码“代码> ErnOn==0 < /COD>不能保证。这也意味着人们阅读代码不必检查周围的代码来验证前提条件。公平点,这是有道理的。也许我误解了,但是我不认为这是有效的C(虽然C++的样本可能是可以的)。因为C要求所有变量声明出现在任何代码之前(因此*e
和nthread
的声明将导致错误)…@neilr8133:您指的是C标准的一个过时版本。C标准自1999年以来就允许这样的声明,而且编译器对该功能的广泛支持比这还要早。