C++编写数字反转程序时string转int报错、核心转储问题求助
问题原因
- 字符串访问越界是触发core dumped的核心原因:C++
std::string有效索引范围为0 ~ 长度-1,原代码循环条件写为i < n.length()+1,取值用n[n.length()-i],当i=0时会访问超出有效内容范围的\0结束符,i更大时会访问字符串分配空间外的内存,直接触发段错误。 - 反转逻辑错误:按原循环逻辑得到的
ans首字符为\0,内容不符合数字反转预期,传给stoi时会因输入非法触发异常崩溃。 - 未处理转换溢出:
stoi仅支持转换范围在int承载范围内的数字,若输入数字过长,反转后超出int最大值(通常为2147483647)也会抛出异常导致崩溃。
修正后的代码
#include <bits/stdc++.h> using namespace std; void solve(){ string n, ans=""; cin >> n; // 修正循环边界和取值逻辑 for(int i=0; i < n.length(); ++i){ ans += n[n.length() - 1 - i]; } // 不需要用到数值变量可以直接删除转换逻辑,需要兼容长数字建议转long long类型 long long num = stoll(ans); cout << ans << "\n"; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); int t; cin >>t; while(t--){ solve(); } return 0; }
额外说明
如果需求仅为输出反转后的数字字符串,可完全删除数字转换逻辑,直接输出ans即可,既可以避免溢出问题,也能兼容更长的数字输入。
内容的提问来源于stack exchange,提问作者Adrian Otgonzaya
相关产品推荐
相关产品推荐

