c 命令行参数
c command line arguments
#include <stdio.h>
#include <string.h>
int convert(char *str)
{
int i, number = 0;
for (i = 0; str[i] != '[=10=]'; ++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 个参数时,它应该打印 "not enough arguments" 但它会给出错误分段错误。
输入:./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] != '[=11=]'; ++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;
}
P.S。由于 argv[0]
通常是程序名称而不是参数,因此 argv[1]
和 argv[2]
将是您的参数, argv[3]
将是 NULL
如果您计算它们,您将计算两个参数,而不是三个;当给出三个参数时,期望 argc == 4
。
您可能对 getopt.h library 感兴趣。它处理命令行参数的所有标准功能。
#include <stdio.h>
#include <string.h>
int convert(char *str)
{
int i, number = 0;
for (i = 0; str[i] != '[=10=]'; ++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 个参数时,它应该打印 "not enough arguments" 但它会给出错误分段错误。
输入:./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] != '[=11=]'; ++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;
}
P.S。由于 argv[0]
通常是程序名称而不是参数,因此 argv[1]
和 argv[2]
将是您的参数, argv[3]
将是 NULL
如果您计算它们,您将计算两个参数,而不是三个;当给出三个参数时,期望 argc == 4
。
您可能对 getopt.h library 感兴趣。它处理命令行参数的所有标准功能。