strlen文字列長を求める問題

1431 ワード

(1)次の手順を見てください.
#include
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<

以上のプログラムでは、int型はchar型の文を変換しますが、文字列の長さを求めるのはいつも間違いで、長い間考えてやっと何が起こっているのか分かりました.ここに記す.
理解されるように、戻り値は3であるべきである.しかし、実際にはそうではありません.
strlen()は文字列の長さを求めるので、'0'文字に出会ってから終わります.strlen(ch)文は、ch(これはアドレス)に渡されただけで、関数がいつ終わるかは知られていないので、関数は'0'に遭遇するまで文字の個数をカウントし続けます.
同様に、次のコードにも同じ問題があります.
#include
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<

したがって、このような事態を回避するために、以下のような処理を行うことができる.
#include
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<

(2)筆者はいくつかの筆記試験問題においても,ライブラリ関数を用いずにいくつかの機能を実現することを要求する問題をよく見かける.しかし、実際にはstrlen関数を呼び出す必要があります.筆者は、最も正直な方法は、文字列の長さを求める関数を自分で書くことだと考えています.【もちろん、他の巧妙な扱いは排除しない】
int str_length(char *str)
{
if(NULL==str)
   return 0;
int len = 0;
while(*str!='\0')//       '\0'  
{
   ++len;
   ++str;
}
return len;
}