atoi() 在应用于大型命令行参数时会产生不正确的值
atoi() produces incorrect value when applied to a large command line argument
我从命令行读取值 300000000000,并使用 atoi 将其转换为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
我什至尝试使用字符串流并且可以工作,但是当我将时间片传递给另一个函数时,该函数中的值仍然错误
使用strtoll
函数:
timeSlice = strtoll(argv[1], nullptr, 10);
这实际上取决于您使用的是 32 位还是 64 位系统,以及您使用的是 Windows 还是 Linux
Atoi,Atol,Strtol和Strold都将在32位可执行文件上返回32位数字。
环礁,strtoll 将在 32 位和 64 位可执行文件上返回 64 位数字
atol,strtol,strtold 将在 64 位 Windows 可执行文件上返回 32 位数字,但在 64 位 Linux 可执行文件上返回 64 位数字。
在 64 位 Windows 可执行文件上,long=int,64 位 linux 可执行文件 long=long long
相关文章:
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 失败,出现错误 87:参数不正确.如何判断哪个参数不正确?
- CMake 设置使用不正确的参数数调用的目标属性
- CreateThread的参数不正确
- Boost::Asio串行读/写打开:参数不正确
- 模板对象管理器,参数不正确
- Cmake add_executable使用不正确的参数数量调用
- 为什么构造函数C++接受不正确的类型作为参数?
- 收到错误 87,安装程序的参数不正确DiGetDeviceInterfaceDetail
- 带有 decltype 的模板参数数量不正确
- 我将类型库(.tlb)导入到Delphi中,但函数参数似乎不正确.我应该如何解决它
- 值传递的参数在 Visual Studio 2015 x64 调试器中显示不正确
- std ::旋转参数不正确
- 重载解析不正确,const 参数的值为 0
- 'decltype'参数不正确
- 在visual c++中从无序映射继承时,模板参数的sizeof()不正确
- LoadLibraryEx错误87(参数不正确)
- Win32 窗口包装器出错(参数不正确)
- IDirectSound8 setCooperativeLevel 返回不正确的参数