问题:
运行以下程序,输入“潮湿”:
int main(){
char * s= new char[50];
cin>>s;
cout<<“strlen(s):”<<strlen(s)<<endl;
if(-1<strlen(s)){
cout<<“666”<<endl;
}else{
cout<<“???”<<endl;
}
}
理应得到输出:
strlen(s):4
666
实际运行得到:
strlen(s):4
???
难道-1>4了?
解决:
找一下strlen的返回值类型,发现是 size_t,这是一个无符号整数类型,用于表示大小和长度。
而当 -1(一个负整数)与size_t类型的值进行比较时,会发生整数提升(integer promotion),即将-1转换为一个足够大的无符号整数(可能为0xFFFFFFFF),以便能够表示-1的绝对值。于是“-1>4”了。
改正:只需将strlen()返回值强制类型转换为int即可。
if(-1<(int)strlen(s)){cout<<"666"<<endl;
}else{cout<<"???"<<endl;
}
得到:
strlen(s):4
666
在写数据结构课设的KMP比较部分,结果得到全部匹配的结果。。。debug了文件读写、中文字符问题、KMP的写法问题,就是没想到给我在这地方硬控了我3小时…