gpt4 book ai didi

c - 如何在 C 的 main 函数中将参数从 char 转换为 int?

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:29 25 4
gpt4 key购买 nike

我有这个代码:

int main(int argc, char *argv[]) {
int num = *argv[1];

当我在终端中使用参数运行该函数时:例如,如果我要调用 ./main 17,我需要 num = 17。但是,对于此代码,num = 49(ASCII 值为 1,因为 argv 是一个字符数组)。我怎样才能让它以 int 形式读取 num = 17?玩弄代码,我可以让它将参数转换为 int,但它仍然只会读取/转换第一个值(1 而不是 17)。

我是 C 的新手,指针/指向数组的指针的概念仍然让我感到困惑。 *argv[1] 不应该返回数组中第二个字符的值吗?为什么它改为读取数组中第二个字符的第一个值?

感谢您的帮助!

最佳答案

How do you convert parameters from char to int?

可以通过简单的转换(提升)来完成,但这不是你的情况。

在您的情况下,*argv[]指向 char 的指针数组(您可以使用 this 分解复杂的 C 声明),这意味着 argv[1] 是数组中的第 2 个元素,即数组中的第 2 个 char*,表示 *argv[1] 是第一个 char 在数组中的第 2 个 char* 中。

为了更清楚地显示它,假设 argv 包含 2 个字符串 {"good", "day"}argv[1]"day"*argv[1]'d'(注意区别在类型中 - char vs char*!)

现在,您的输入字符串中剩下第一个 char,即 '1'。它的 ascii 确实是 49 as,所以为了得到它的 "int" 值,你应该像这样使用 atoi:

int i = atoi("17");

BUT atoi 得到 const char * 所以给它提供 17 是个好主意,同时给它发送一个char 不会。这意味着 atoi 应该得到 argv[1] 而不是 *argv[1]

int main(int argc, char *argv[]) {
int num = atoi(argv[1]);
// not : int num = *argv[1]; --> simple promotion that would take the ascii value of '1' :(
// and not: int num = atoi(*argv[1]); --> argument is char

注意:atoi 被认为已过时,因此您可能想使用 long int strtol(const char *str, char **endptr, int base) 但是对于一个简单的例子,我更喜欢使用 atoi

关于c - 如何在 C 的 main 函数中将参数从 char 转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45687234/

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