c strlen C++ strlen
先看下面幾個(gè)例子:
/* 定義數(shù)據(jù) */
...
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
我們這里所說(shuō)的"error"不是說(shuō)語(yǔ)法上出錯(cuò)。語(yǔ)法上都沒(méi)錯(cuò),編譯運(yùn)行也都能通過(guò)。這里的"error"指的是:這條語(yǔ)句無(wú)法按照你預(yù)想的那樣工作。2,4,5,6這四條語(yǔ)句的結(jié)果將永遠(yuǎn)是真。
為什么呢?
我們先看庫(kù)函數(shù) strlen 的原型吧:
size_t strlen( char const *string );
注意strlen返回一個(gè)類(lèi)型為size_t的值。那么size_t是什么類(lèi)型呢?這個(gè)類(lèi)型是在頭文件stddef.h中定義的,它是一個(gè)無(wú)符號(hào)整數(shù)類(lèi)型。問(wèn)題出來(lái)了,在表達(dá)式中使用無(wú)符號(hào)數(shù)可能導(dǎo)致不可預(yù)料的后果。
當(dāng)表達(dá)式中存在有符號(hào)類(lèi)型和無(wú)符號(hào)類(lèi)型時(shí),所有的操作數(shù)都自動(dòng)轉(zhuǎn)換為無(wú)符號(hào)類(lèi)型。無(wú)符號(hào)數(shù)的運(yùn)算結(jié)果絕對(duì)不可能是負(fù)的。所以,2,4,5,6這四條語(yǔ)句的結(jié)果將永遠(yuǎn)是真。
遇到這樣的情況,你要么用1,3,7這樣的形式,要么將strlen的返回值強(qiáng)制性轉(zhuǎn)換為int。
?
?
string類(lèi)型不能用strlen()求長(zhǎng)度的,strlen只適全char *類(lèi)型的.
如果要求的話得先把string類(lèi)型轉(zhuǎn)換成char *類(lèi)型,用c_str()函數(shù)轉(zhuǎn)換
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str="fjaljjfj";
int len;
len=strlen(str.c_str());
cout<<len<<endl;
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的c strlen C++ strlen的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: crackme之018
- 下一篇: C语言定义了一个结构体怎么分配内存?C\