首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将参数转换为main [int]

将参数转换为main [int]
EN

Stack Overflow用户
提问于 2019-03-12 00:35:21
回答 2查看 0关注 0票数 0

这个问题在这里已有答案:

  • 使用argv [] 3答案时出现 分段错误
  • 使用argv进行分段错误[1] 1回答
  • 为什么使用atoi命令行参数进行分段错误 3答案
  • 分段错误argv 3答案
  • 分段故障检查用户参数c 3答案

我正在尝试tom编写一个简单的程序,我接受命令行参数,将其转换为整数并将其打印到屏幕:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {

  int num = atoi(argv[1]); 
  printf("%s/n", num);

  return 0;

}

编译并运行代码后,我收到了一个

代码语言:javascript
复制
segmentation fault (core dumped error)

我试图用输出打印输出,只是打印到屏幕上,它可以正常工作。问题似乎是我将char转换为int的方式。我哪里错了?

EN

回答 2

Stack Overflow用户

发布于 2019-03-12 09:16:41

int num = atoi(argv[1]); printf("%s/n", num);

替换格式"%d\n",目前您尝试将num写为字符串(%s),因此打印尝试访问地址中的字符是num的值,该地址无效导致崩溃

或者当然假设你的程序至少得到一个参数,所以argc > 1并且至少argv[1]不是NULL

根据备注的要求,更正和更安全的方法可以是:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  if (argc > 1) {
    int num;
    char c;

    if (sscanf(argv[1], "%d%c", &num, &c) == 1)
      printf("%d\n", num);
    else
      printf("'%s' does not (only) contain an int\n", argv[1]);
  }
  else
    printf("an argument is required for '%s'\n", argv[0]);

  return 0;
}

编译和执行:

代码语言:javascript
复制
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra i.c
pi@raspberrypi:/tmp $ ./a.out 
an argument is required for './a.out'
pi@raspberrypi:/tmp $ ./a.out  12
12
pi@raspberrypi:/tmp $ ./a.out  a
'a' does not (only) contain an int
pi@raspberrypi:/tmp $ ./a.out  12a
'12a' does not (only) contain an int

我使用sscanf而不是atoi,因为如果参数不是有效整数,atoi返回0而不指示错误。

我让你看看添加两个char数组的值以获取更多细节,包括使用strtod

票数 0
EN

Stack Overflow用户

发布于 2019-03-12 09:37:30

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  if (argc < 2) {
     printf("You must provide a command-line argument.\n");
     return 1;
  }
  int num = atoi(argv[1]); 
  printf("%d\n", num);

  return 0;

}

正如其他人所说,除非argc至少为2(表示在运行程序时必须至少提供一个命令行参数),否则不能在没有segfaulting的情况下访问argv [1]。问题可能是您通过不向程序提供命令行参数来取消引用空指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档