【问题标题】:C: Command line arguments with stringC:带字符串的命令行参数
【发布时间】:2015-01-27 04:32:45
【问题描述】:

我正在尝试编写一个程序,该程序将字符串作为命令行参数,然后通过将字符串作为输入的函数 (str_to_int) 运行所述参数。但是,当我尝试编译程序时,我收到一条警告说

initializing 'char *' with an expression of type 'int' [-Wint
conversion]
  char* str = atoi(argv[1]);
    ^     ~~~~~~~~~~~~~

当我运行程序时出现分段错误 我已经对 str_to_int 进行了很多测试,所以我很确定问题出在命令行程序上。这是它的代码。

#include "hw3.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
  char* str = atoi(argv[1]);
  printf("%d\n", str_to_int(str));
  return 0;
}

谁能告诉我我做错了什么?谢谢。

【问题讨论】:

  • atoi 返回一个int
  • 您的代码接受一个字符串 (argv[1]),将其转换为 int (atoi()),将结果放入字符串 (char*),这会搞砸,然后将其转换为int (str_to_int())。这里的目标是什么?!
  • remyabel 和 Biffen(以及编译器 :-))是对的。
  • 那么如何从命令行读取字符串?
  • @dmeagher101 我认为如果你忽略atoi应该没问题。

标签: c command-line-arguments


【解决方案1】:

这就是你所需要的,但如果你省略命令行参数,它会崩溃。

{
    printf("%d\n", str_to_int(argv[1]));
    return 0;
}

这更健壮:

int main(int argc, char *argv[])
{
    if (argc == 1)
        printf("missing parameter.");
    else
        printf("%d\n", str_to_int(argv[1]));

    return 0;
}

【讨论】:

  • 第一个不一定会崩溃,取决于str_to_int 以及是否接受空指针作为有效参数。
【解决方案2】:
#include "hw3.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
  char* str = argv[1];
  printf("%d\n", str_to_int(str));
  return 0;
}

【讨论】:

    【解决方案3】:

    只需删除 atoi 函数调用,它应该可以工作

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多