int 的 C 命令行参数

C command line arguments to int

#include <stdio.h>
#include <string.h>

int myatoi(char *str) {
    int i, res = 0;
    for (i = 0; str[i] != '[=10=]'; ++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 次。

您可以直接将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" 会发生什么。

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

这是更正后的版本:

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

请注意,您的函数仅处理完全由数字组成的字符串。没有符号,没有空格,不允许有其他字符。您可以使用更灵活的标准函数,例如在 <stdlib.h>

中声明的 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;
    }
}