c - 如何将命令行参数读取为整数而不是字符串?

标签 c argv

对不起,我的问题,我知道有很多相似之处,但我没有找到任何简单的足以帮助我的东西。

我已经开始用 C 编写代码并尝试解决一个简单的练习:从命令行读取一个整数数组,使用函数 array_sum 对元素求和并打印结果。 (输入 3 个元素的示例数组:3 0 1 2)

int array_sum(int *array,  size_t size);
int main(int argc, char **argv){
    int sum=array_sum(argv, argc);
    printf("array_sum: %i\n", sum);
    return 0;
}

我的问题是 argv 是一个字符数组,而函数需要一个整数数组。 我应该在一个新的 int 数组中一个一个地转换元素吗?有更好的方法吗?

最佳答案

argv 是指向 C 字符串的指针数组。您需要先将字符串转换为整数。你可以这样做:

int array_sum(int *array,  size_t size);
int main(int argc, char **argv){
    int *num_arr = malloc((argc - 1) * sizeof *num_arr);

    for (int i = 0; i < argc - 1; ++i)
      num_arr[i] = atoi(argv[i+1]);

    int sum = array_sum(num_arr, argc - 1);
    printf("array_sum: %i\n", sum);

    free(num_arr);
    return 0;
}

使 main 中的代码更短的唯一方法是将转换循环移动到一个单独的函数中,该函数返回 malloced 指针。

关于c - 如何将命令行参数读取为整数而不是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186565/

相关文章:

php - 如何在 PHP 中覆盖 register_argc_argv?

c - KDBG 监视所有 arg 变量

perl - 为 Perl 脚本传递命令行参数以及来自 STDIN 的输入?

c - 简单的多线程,无需getch

c - 如何将内存地址声明为函数的参数?

c - 当使用字符串变量作为路径时,fopen() 为 null

c - 如果它在自己的定义中使用,我是否必须预定义类型/结构?

c - 关于 Flex、Bison 和 Segmentation Fault

c++ - 使用 argv 初始化 C++ 字符串

c - 如何在 C 中找到 argv[] 的长度