【问题标题】:atoi only returning first digit of char* parameter [duplicate]atoi 仅返回 char* 参数的第一个数字[重复]
【发布时间】:2013-10-14 12:42:44
【问题描述】:

当使用参数 15 运行我的程序时,atoi 返回 1。 Atoi 只返回第一个数字。这应该发生吗?如何绕过它?

int _tmain(int argc, char* argv[])
{
    int a = atoi(argv[1]);
}

【问题讨论】:

  • 你是如何确定atoi返回1的?
  • 通过在该行之后中断并查看 a 中的值
  • 那行不通。由于a 是本地的且从未访问过,因此编译器没有理由将结果实际写入a
  • 不确定您的建议。在单独的行上声明并不能解决问题。那 1 肯定会被写入 a。打印打印 1. 打印 atoi(argv[1]) 打印 1
  • @user2081737 为什么不添加printf( "%d\n", a ) ;std::cout << a << std::endl;

标签: c++ c atoi


【解决方案1】:

它应该转换整个以 NUL 结尾的字符串:

#include <iostream>
#include <stdlib.h>

int main() {
    std::cout << atoi("15");
}

结果:

15

【讨论】:

  • 工作正常。看来我的 argv 很奇怪。它在使用这个图书馆的计算机之前就这样做了,但我不记得我是如何解决它的。
【解决方案2】:

从 _tmain 更改为 main 解决了这个问题。

【讨论】:

  • 如果你使用_tmain,你也应该使用TCHAR而不是char和_ttoi而不是atoi
猜你喜欢
  • 2021-03-29
  • 1970-01-01
  • 2018-02-10
  • 2022-08-12
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
相关资源
最近更新 更多