strlen求字符串長度問題

(1)請看下面程序:

#include<iostream>
using namespace std;

int main(void)
{
int a[3] = {141,229,172};
char ch[3] = {0};
for(int i=0;i<3;i++)
  ch[i] = (char)a[i];
cout<<strlen(ch)<<endl;
getchar();
return 0;
}

以上程序,int 型轉化char型的語句,但是求字符串長度老是出錯,想了很久才弄明白怎麼回事。記於此。

按照理解,返回值應該是3.但是事實上,卻不是.

因爲strlen()求字符串的長度,是遇到'\0'字符纔會結束的。strlen(ch)語句,只是傳進去了ch(這是一個地址),並未告知函數在何時結束,因此,函數會一直往後計數字符的個數,直到遇到'\0'。

同樣的,下面的代碼也存在着相同的問題:

#include<iostream>
using namespace std;
{
int a[3] = {141,0,172};//注意,第二個是0
char ch[3] = {'a','b','c'};
for(int i=0;i<3;i++)
  ch[i] = (char)a[i];
cout<<strlen(ch)<<endl;
getchar();
return 0;
}


因此,爲了避免這種情況,可以作如下處理:

#include<iostream>
using namespace std;
{
int a[3] = {141,229,172};
char ch[4] = {0};//將空間稍微開大,並賦值'\0'
for(int i=0;i<3;i++)
    ch[i] = (char)a[i];
cout<<strlen(ch)<<endl;
getchar();
return 0;
}

(2)筆者在一些筆試題目中也常常看到,一些要求不使用庫函數而實現某些功能的題目。但是,事實上我們又需要調用strlen函數。筆者認爲,最老實的辦法就是自己寫一個求字符串長度的函數。【當然,不排除其他巧妙的處理方式】

int str_length(char *str)
{
if(NULL==str)
   return 0;
int len = 0;
while(*str!='\0')//字符串的結尾以'\0'標記
{
   ++len;
   ++str;
}
return len;
}


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