[英]c command line arguments
#include <stdio.h>
#include <string.h>
int convert(char *str)
{
int i, number = 0;
for (i = 0; str[i] != '\0'; ++i) {
number = number * 10 + str[i] - '0';
}
return number;
}
int main(int argc, char *argv[])
{
int j;
int c = convert(argv[2]);
if (argc == 3) {
for (j = 0; j < c; 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;
}
给出少于3个参数时出现分段错误。 如果给出少于3个参数,则应打印“参数不足”,但会出现错误分段错误。
输入: ./a raju
预期输出: not enough arguments
int c = convert(argv[2]);
当argc
为2时, argv[2]
将为NULL
。 您希望这行代码能做什么,因为程序运行时首先要执行它?
进行重构,以使其下方的条件构成针对该条件的保护,这与您可能想要的目的更接近:
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int convert(char *str)
{
int i, number = 0;
for (i = 0; str[i] != '\0'; ++i) {
number = number * 10 + str[i] - '0';
}
return number;
}
int main(int argc, char *argv[])
{
if (argc != 3) {
printf( argc < 3 ? "Not Enough Arguments\n"
/*argc > 3*/ : "Too Many Arguments\n" );
exit(EXIT_FAILURE);
}
int c = convert(argv[2]);
for (int j = 0; j < c; j++) {
printf("Hello, %s!\n", argv[1]);
}
return 0;
}
PS由于argv[0]
通常是程序名称而不是参数,因此argv[1]
和argv[2]
将作为您的参数, argv[3]
将为NULL
,如果您对它们进行计数,则将计算两个参数,而不是三; 当给出三个参数时,期望argc == 4
。
您可能对getopt.h库感兴趣。 它处理命令行参数的所有标准功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.