c strlen C++ strlen
先看下面幾個例子:
/* 定義數據 */
...
char *msg1 = "testtest";
char *msg2 = "test";
int len = 20, t = 1;
...
1-----> if( strlen(msg2) >= strlen(msg1) )...???? //right
2-----> if( strlen(msg2) - strlen(msg1) >= 0 )...?? //"error"
3-----> if( strlen(msg2) >= 10 )....?? //right
4-----> if( strlen(msg2) - 10 >= 0 )....??? //"error"
5-----> if( strlen(msg2) - len >= 0 )...?? //"error"
6-----> if( t - strlen(msg2) >= 0 )...?? //"error"
7-----> if( t >= strlen(msg2) )...??? //right
我們這里所說的"error"不是說語法上出錯。語法上都沒錯,編譯運行也都能通過。這里的"error"指的是:這條語句無法按照你預想的那樣工作。2,4,5,6這四條語句的結果將永遠是真。
為什么呢?
我們先看庫函數 strlen 的原型吧:
size_t strlen( char const *string );
注意strlen返回一個類型為size_t的值。那么size_t是什么類型呢?這個類型是在頭文件stddef.h中定義的,它是一個無符號整數類型。問題出來了,在表達式中使用無符號數可能導致不可預料的后果。
當表達式中存在有符號類型和無符號類型時,所有的操作數都自動轉換為無符號類型。無符號數的運算結果絕對不可能是負的。所以,2,4,5,6這四條語句的結果將永遠是真。
遇到這樣的情況,你要么用1,3,7這樣的形式,要么將strlen的返回值強制性轉換為int。
?
?
string類型不能用strlen()求長度的,strlen只適全char *類型的.
如果要求的話得先把string類型轉換成char *類型,用c_str()函數轉換
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str="fjaljjfj";
int len;
len=strlen(str.c_str());
cout<<len<<endl;
return 0;
}
總結
以上是生活随笔為你收集整理的c strlen C++ strlen的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: crackme之018
- 下一篇: crackme之019