这个小程序描述了我在更大的项目中遇到的问题:
int main()
{
string str1="11111111";
string str2="22222222";
char a=str1[2];
char *a1=&a;
int var1= atoi(a1);
char b=str2[2];
char *b1=&b;
int var2= atoi(b1);
cout<<var1<<endl;
cout<<var2;
return 0;
}
为什么我要
1
21
而不是
1
2
有什么方法可以解决这个问题吗? - 感谢我试图找出两个小时的帮助
答案 0 :(得分:2)
你错误地得到了两个结果(即使你的第一个结果恰好符合你的期望)。
问题是a1
和b1
都指向一个字符,而atoi
期望一个以空字符结尾的字符串。
您可以通过构造字符数组而不是复制单个字符来解决此问题:
char a1[2] = { str1[2] }; // C++ compiler supplies null terminator, you supply the size
int var1= atoi(a1);
char b1[] = { str2[2], 0 }; // You supply null terminator, C++ compiler computes the size
int var1= atoi(b1);
答案 1 :(得分:1)
使用std::stoi()
和std::string::substr()
,特别是如果您已std::string
:
std::string str1="11111111";
std::string str2="22222222";
int var1= std::stoi( str1.substr( 2, 1 ) ); // third symbol, 1 symbol long
int var2= std::stoi( str2.substr( 2, 1 ) );
答案 2 :(得分:0)
atoi需要一个指向以null结尾的char字符串的指针。您将指针传递给char。发生了什么是未定义的。你最好使用std :: stoi而不是atoi,因为atoi有一些谬误:What is the difference between std::atoi() and std::stoi?
答案 3 :(得分:0)
atoi
想要一个指向零终止字符序列的第一个元素的指针
你传给它一个指向单个字符的指针,在你醒来时留下未定义的行为。
要获取其中一个数字的整数值,请距离'0'
:
int var = str1[2] - '0';