gpt4 book ai didi

c 命令行参数

转载 作者:行者123 更新时间:2023-11-30 18:49:41 25 4
gpt4 key购买 nike

#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预期输出:参数不足

最佳答案

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;
}

附注由于 argv[0] 通常是程序名称而不是参数,因此 argv[1]argv[2] 将是您的参数, argv[3] 将是 NULL,如果你计算它们,你会计算到两个参数,而不是三个;当给出三个参数时,期望 argc == 4

关于c 命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42125432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com