字符串的數組表示

一:求字符串的長度

頭文件:#include <string.h>


strlen()函數用來計算字符串的長度,其原型爲:
unsigned int strlen (char *s);

【參數說明】s爲指定的字符串。

strlen()用來計算指定的字符串s 的長度,不包括結束字符"\0"。

【返回值】返回字符串s 的字符數。

注意一下字符數組,例如
char str[100] = "http://see.xidian.edu.cn/cpp/u/biaozhunku/";
定義了一個大小爲100的字符數組,但是僅有開始的11個字符被初始化了,剩下的都是'\0',所以 sizeof(str) 等於100,strlen(str) 等於11。

但是如果字符的個數等於字符數組的大小,那麼strlen()的返回值就無法確定了,例如
char a[10]={'a','b','c','d','e','f','g','h','i','k'};(c++編譯系統會對數組空餘的元素以及字符串常量後一位自動賦值\0,因此,人們爲了處理方法一致,不會採用上述賦值方法,而是在有效字符的後面也人爲的加上\0)
strlen(str)的返回值將是不確定的。因爲str的結尾不是0,strlen()會繼續向後檢索,直到遇到'\0',而這些區域的內容是不確定的。

注意:strlen() 函數計算的是字符串的實際長度,遇到第一個'\0'結束。如果你只定義沒有給它賦初值,這個結果是不定的,它會從首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是變量聲明後所佔的內存數,不是實際長度,此外sizeof不是函數,僅僅是一個操作符,strlen()是函數

#include<string>
#include<iostream>
using namespace std;
int main()
{
    char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/";
    char str2[100] = "http://see.xidian.edu.cn/cpp/u/shipin_liming/";
	char str3[5] = {'a','b','c','d','e',};
	//等價char str3[5];str3[0]='a';str3[1]='b';str3[2]='c';str3[3]='d';str3[4]='e';
	cout<<strlen(str3);
    printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1));
    printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2));
    printf("strlen(str3)=%d, sizeof(str3)=%d\n", strlen(str3), sizeof(str3));
    return 0;
}

二:定義字符串的方法

char a[]="i am a student"
string a="i am a student"
char *p="i am a student"
注意:系統會自動在字符串結尾加上‘\0’,這裏說的是字符串、

這裏引申出第三個問題

三:char a[]="i am a student"和char *p="i am a student"的區別

待續。。。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章