首页 > 解决方案 > 将 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”条件,那么为什么?

标签: c++arraysstringcharacterstrlen

解决方案


当你输入时astrlen会返回unsigned ( size_t) 11 - 2不会-1只是在 0 处环绕并给你一个非常大的无符号整数(在你的情况下为 18446744073709551615)。


推荐阅读