将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”条件,那么为什么?

回答

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


以上是将strlen(s)值分配给整数会改变输出,为什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>