Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中从命令行接收参数_C - Fatal编程技术网

如何在C中从命令行接收参数

如何在C中从命令行接收参数,c,C,我想写一个程序来接收来自命令行的参数。它就像一种atof() 我的计划是这样的: 9 char s[] = "3.1415e-4"; 10 if (argc == 1) { 11 printf("%e\n",atof(s)); 12 } 13 else if (argc == 2) { 14 //strcpy(s, argv[1]); 15 printf("%e\n",atof(argv[1]));

我想写一个程序来接收来自命令行的参数。它就像一种atof()

我的计划是这样的:

  9     char s[] = "3.1415e-4";
 10     if (argc == 1) {
 11         printf("%e\n",atof(s));
 12     }
 13     else if (argc == 2) {
 14         //strcpy(s, argv[1]);
 15         printf("%e\n",atof(argv[1]));
 16     }
1.我应该使用argv[1]将字符串传递给我的atof(),还是将其放入s[]中

2.如果我最好把它放在s[]中,是否有一些内置函数来完成这个“put”工作?可能是strcpy()之类的函数


谢谢。

无需将其放入
s
。只需使用argv[1]

话虽如此,您是否正在将其放入s中(这还不错)请确保将代码更改为:

char s[20];
strcpy(s, argv[1]);

对常量字符数组使用strcpy不是一个好主意。

您只需将其作为
argv[1]
传递即可,无需复制。如果您想复制它,您需要确保
s
实际上可以保存
argv[1]
中包含的完整字符串,如果没有,则分配一个更大的数组。。。所以这是梅西耶。

我个人会这样做:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
  const char defaultStr[]="3.1415e-4";
  const char *arg = NULL;
  if(argc <= 1)
  {
     arg = defaultStr;
  }
  else
  {
     arg = argv[1];
  }

  printf("%e\n", atof(arg));

  return 0;
}
#包括
#包括
int main(int argc,字符**argv)
{
const char defaultStr[]=“3.1415e-4”;
常量字符*arg=NULL;

if(argc,谢谢,Pablo Santa Cruz和Péter Török。但有一件事让我困惑,参数的类型是char*,如何将参数放入s[]?@dennis,
char[]
\u在需要时会降级为
char*
。这意味着在实践中,这两种符号的底层内存表示形式实际上是相同的,并且您可以在大多数情况下互换使用这两种符号。例外情况是,您不能重新分配数组,即
s=argv[1]
导致编译错误。如果要复制
argv[1]
的内容,请使用前面提到的
strcpy