C语言命令行传参实现两数相乘报invalid operands错解决方法
报错原因
编译错误的根源是类型不匹配:C语言中命令行传入的所有参数都会被存储为C风格字符串,argv数组的每个元素都是char*类型(字符串指针),你直接用int类型的result和char*类型的argv[i]做乘法运算,两种类型不支持直接做算术运算,编译器因此抛出错误。
除此之外原代码还有两个逻辑问题:
- 没有做参数合法性校验:你要实现两数相乘的功能,需要明确要求用户传入2个数值参数,原代码遍历所有传入参数相乘的逻辑不符合需求,参数数量不足时也会出现异常。
- 缺少字符串转整数的步骤:必须先把字符串格式的参数转换成整数类型,才能进行数值计算。
修复方案
按以下步骤修改代码即可:
- 引入
<stdlib.h>头文件,该头文件提供了将字符串转换为整数的atoi()函数 - 增加参数个数校验:
argc的计数包含程序本身的路径,因此传入2个乘数时argc的值应为3,如果参数数量不符合要求,打印正确的使用提示后返回非0值表示程序运行异常 - 移除遍历所有参数相乘的循环,使用
atoi()分别将两个参数转换为整数后再做乘法运算
修复后可正常运行的代码
#include <stdio.h> #include <stdlib.h> /** * main - Entry point for my program * @argc: This is the number of arguments * @argv: This is the array of arguments * * Return: Zero upon program success, non-zero on invalid input */ int main(int argc, char *argv[]) { int result; if (argc != 3) { printf("Usage: %s <num1> <num2>\n", argv[0]); return 1; } result = atoi(argv[1]) * atoi(argv[2]); printf("%d\n", result); return 0; }
运行示例
编译代码后执行如下命令测试:
./3-mul 4 6
程序会正确输出计算结果24,不会再出现之前的编译报错。
内容的提问来源于stack exchange,提问作者Leuel Asfaw
相关产品推荐
相关产品推荐

