int

时间:2017-02-04 20:45:36

标签: c command-line-arguments

#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次。

2 个答案:

答案 0 :(得分:2)

您可以直接将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]是&#34; xyz123&#34;会发生什么?例如。

答案 1 :(得分:1)

您的函数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;
}

请注意,您的函数仅处理仅在数字上组成的字符串。没有标志,没有空格,不允许其他字符。您可以使用更灵活的标准函数,例如atoi

中声明的strtol<stdlib.h>

以下是您的代码的简化版本:

#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;
    }
}