gpt4 book ai didi

c - 在 C 中分割命令行参数

转载 作者:行者123 更新时间:2023-11-30 20:09:22 25 4
gpt4 key购买 nike

我想将第一个命令行参数拆分为两个不同的数字。以这种方式运行程序时出现段错误错误:

gcc -ansi main.c -o main
./main 6000V7000

这是源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
char *token;
char arr[200];
strcpy(arr, argv[1]);

token = strtok(arr, "v,V");
int firstNumber = atoi(token);
token = strtok(NULL, "v,V");
int secondNumber = atoi(token);

return 0;
}

如何解决这个问题?

最佳答案

您不测试是否至少有一个命令行参数,也不测试该参数的长度是否少于 200 个字符,也不测试 strtok 的返回值:您将出现未定义的行为如果命令没有给出任何参数,或者参数不包含任何字符 vV,

如果您使用 gcc -ansi main.c -o main 有效编译程序并使用发布的参数作为 ./main 6000V7000 运行它,您不应该得到段错误...有些事情您没有告诉我们;)

最好避免疯狂的假设:测试意外情况,以便在所有情况下为程序提供定义的行为。

这是使用 sscanf() 解决您的问题的更简单方法:

#include <stdio.h>

int main(int argc, char *argv[]) {
int a, b;
if (argc > 1 && sscanf(argv[1], "%d%*1[vV,]%d", &a, &b) == 2)
printf("a=%d, b=%d\n", a, b);
return 0;
}

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

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