atoi()在应用于一个大的命令行参数时产生错误的值。

问题描述 投票:0回答:1

我从命令行读入300000000000的值,然后用astoi把它转换为int64_t,但是它输出了错误的值。

int main(int argc, char * const argv[]){
  int64_t timeSlice = -1;

  if(argc == 4){
      timeSlice = atoi(argv[1])
      cout<<"timeslice: "<<timeSlice<<endl;

  }
}

我在数字上运行我的程序 300000000000

预期产出:timeSlice: 300000000000实际输出。timeslice: -647710720我甚至试过使用stringstream,它可以工作,但是当我把timeslice传给另一个函数时,该函数的值仍然是错误的。

c++ atoi int64
1个回答
0
投票

使用 strtoll 功能。

timeSlice = strtoll(argv[1], nullptr, 10);

0
投票

这实际上取决于你使用的是32位还是64位系统,以及你使用的是Windows还是Linux。

atoi, atol, strtol 和 strtold 都会在 32 位可执行文件中返回一个 32 位数字。

atoll, strtoll在32位和64位的可执行文件上都会返回一个64位的数字。

atol, strtol, strtold在64位Windows可执行文件上将返回一个32位数字,而在64位Linux可执行文件上将返回一个64位数字。

在64位的Windows可执行文件中,long=int,64位的Linux可执行文件中,long=long长。

© www.soinside.com 2019 - 2024. All rights reserved.