【问题标题】:C command line arguments to intC 命令行参数到 int
【发布时间】:2017-02-07 02:16:54
【问题描述】:
#include <stdio.h>
#include <string.h>

int myatoi(char *str) {
    int i, res = 0;
    for (i = 0; str[i] != '\0'; ++i) {
        res = res * 10 + str[i] - '0';
        return res;
    }
}

int main(int argc, char *argv[]) {
    int j;
    char str[] = " i want to get argv[2] value here";
    int val = myatoi(str);
    printf("%d", val);
    if (argc == 3) {
        for (j = 0; j < val; j++) {
            printf("Hello, %s \n", argv[1]);
        }
    } else
    if (argc < 3) {
        printf("Not Enough Arguments\n");
    } else
    if (argc > 3) {
        printf("Too Many Arguments\n");
    }
    return 0;
}

如何将argv[2] 的值传递给char str[],以便将字符串转换为int 并打印输出。

argv[0] 是文件名,argv[1] 是字符串,argv[2] 应该是 int

示例输出:./hello raju 2

Hello, raju!
Hello, raju!

argv[2] 是 2,它应该打印 2 次。

【问题讨论】:

  • 查找如何将字符串解析为数字。
  • int val=myatoi(argv[2]); 有什么问题?
  • ... 并且 你检查了argc 值。
  • 您忽略了printf("%d",val); 行的0 输出
  • 只要做 int val = atoi(argv[2]);

标签: c command-line-arguments


【解决方案1】:

您可以直接将argv[2] 传递给myatoi() 或使用变量:

 char *str = argv[2];
 int val=myatoi(str);

您最好在之前使用argv添加输入检查,例如:

if (argc != 3) {
   printf("Expected 2 args\n");
   exit(1);
} 

您的myatoi() 遇到了与atoi() 标准函数类似的问题——缺乏检测和报告错误输入的能力。考虑一下如果argv[2] 是“xyz123”会发生什么。

【讨论】:

  • 我应该怎么做才能检查错误输入,例如 xyz123 @usr
【解决方案2】:

您的函数myatoi 已损坏:您应该将return 语句移出for 循环。

这是一个更正的版本:

int myatoi(const char *str) {
    int i, res = 0;
    for (i = 0; str[i] != '\0'; ++i) {
        res = res * 10 + str[i] - '0';
    }
    return res;
}

请注意,您的函数仅处理仅由数字组成的字符串。没有符号,没有空格,不允许使用其他字符。您可以使用更灵活的标准函数,例如&lt;stdlib.h&gt; 中声明的atoistrtol

这是您的代码的简化版本:

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

int main(int argc, char *argv[]) {
    if (argc == 3) {
        int val = atoi(argv[2]);
        for (int j = 0; j < val; j++) {
            printf("Hello, %s\n", argv[1]);
        }
        return 0;
    } else {
        printf("error: 2 arguments expected\n");
        return 1;
    }
}

【讨论】:

  • 谢谢,但我不应该为这个程序使用内置函数。还有其他方法吗,而不是我的代码@chqrlie
  • @raju:如果不能使用库函数atoi(),请使用我上面贴的修改后的myatoi()
猜你喜欢
  • 2017-06-26
  • 2016-12-22
  • 2013-10-09
  • 1970-01-01
  • 2021-11-09
  • 2013-12-28
  • 2021-03-26
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多