c++ - 将 strlen(s) 值分配给整数会改变输出,为什么?
问题描述
char s[100];
cin>>s;
int x=strlen(s);
if((x-2)>=9)
cout<<s[0]<<x-2<<s[x-1]<<endl;
else
cout<<s<<endl;
输入'a'的输出是'a'但是
char s[100];
cin>>s;
if((strlen(s)-2)>=9)
cout<<s[0]<<strlen(s)-2<<s[strlen(s)-1]<<endl;
else
cout<<s<<endl;
对于相同的输入“a”,该程序的输出是 a18446744073709551615a。
只需将 strlen(s) 值分配给整数即可避免问题发生。为什么 ??
18446744073709551615a 的垃圾值是从哪里来的,如果在第二种情况下正在编译“if”条件,那么为什么?
解决方案
当你输入时a
,strlen
会返回unsigned ( size_t
) 1
。1 - 2
不会-1
只是在 0 处环绕并给你一个非常大的无符号整数(在你的情况下为 18446744073709551615)。
推荐阅读
- c++ - 从 QSqLQuery 返回 int 值
- networkx - NetworkX - 删除节点并重新连接边缘
- javascript - 如何导入 npm 模块 mark.js 以在 chrome 扩展中使用?
- java - 引起:java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:
- vhdl - 在 vhdl 中生成随机整数
- java - 如何处理服务层中复杂对象的保存
- java - Selenium webdriver 问题:预期条件失败:等待位于 (..) 的元素的可见性
- xamarin - Xamarin 将数据传递到另一个页面
- stata - 当有非唯一列时如何附加两个数据集?
- spring-boot - Spring Boot 休息集成