【问题标题】:Parameter passing in C [closed]C中的参数传递[关闭]
【发布时间】:2014-04-29 16:33:59
【问题描述】:
int main(int argc, char *argv[])
{
    int param = *argv[1];
    printf("Parameter = %d\n",param);   
}

我运行它 ./myProgram 5 并且我希望 5 作为输出。出于某种原因,我得到的是 53。

【问题讨论】:

  • argv 的每个成员都是一个字符串,你把它当作一个整数来对待。如果你想要整数,你必须使用例如 atoi 来提取它。
  • 提示:53 = '5' in ASCII。

标签: c


【解决方案1】:

从声明中可以看出,argv 是一个 char 指针数组。这意味着您的主函数没有被传递数值 5,而是(可能是 ASCII 或 UTF8)编码的字符串值“5”。如果您查看ASCII table,您会看到字符“5”被编码为ASCII 中的数值53。还可以看到字母“a”被编码为数字97,所以运行./myProgram a应该输出Parameter = 97

要获取 ASCII 编码字符串的数值,您可以使用 atoi(),例如写

int main(int argc, char *argv[]) {
    int param = atoi(argv[1]);
    printf("Parameter = %d\n",param);   
}

【讨论】:

  • atoi() 不起作用。 “分段错误(核心转储)”
  • atoi() 函数适用于 char 指针,因此请确保删除 *argv[1] 中的星号。
  • 是的 atoi() 现在可以工作了。
  • 如果0 是一个可能要转换的值,atoi() 不能使用,因为它也会在错误时返回0strtol() 是选择的功能,也可以覆盖0。 @kulan
【解决方案2】:

C 不会隐式地将数组的内容转换为任何类型。

要尝试将0-终止的char-数组(C“字符串”)转换为int,请考虑使用strtol()

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多