文字列の長さstrlen

ライブラリ関数の部分的な実装を思い出してください。以下はstrlen関数の実装です。これにも小さな問題があります。それが理にかなっているかわかりません...

#include<stdio.h>

int mystrlen(const char *pSrc)
{
	int nval = 0;

	if(NULL == pSrc)
	{
		printf("init pSrc pointer is NULL,please check it!\n");
		return -1;
	}

	while(*pSrc != '\0')
	{
		nval++;
		pSrc++;
	}

	printf("nval:%d\n",nval);

	return nval;
}

int main(int argc,char argv[])
{
	char *src = "hello world";
	char buf[] = {'a','b','c','\0','d','e','f'};
	char chf[4] = {'a','b','c','d'};
	int nVal = -1;

	nVal = mystrlen(src);
	if(-1 == nVal)
	{
		printf("the string length calculate error\n");
		return -1;
	}
	printf("nVal:%d\n",nVal);

	//what will happen?
	nVal = mystrlen(buf);	
	if(-1 == nVal)
	{
		printf("the string length calculate error\n");
		return -1;
	}
	printf("nVal:%d\n",nVal);
	//Can you get the desired results?
nVal = mystrlen(chf);	
if(-1 == nVal)
{
	printf("the string length calculate error\n");
	return -1;
}
printf("nVal:%d\n",nVal);	

	return 0;
}

文字列とポインタについては、非常に興味深いナレッジポイントです。シンプルなAPIである場合もありますが、よく考えれば、多くのナレッジポイントを再発見できます。これは、「古いものと新しいもの」です。 「まあ、実際にはアップグレードできる場所はたくさんあります。まず、機能するベースを記述してください...
標準ライブラリ関数のstrlen関数の戻り値はsize_tの型であり、定義されたプロトタイプはunsigned intの型です。中点を使用するときは注意してください。符号なしの型を使用すると、操作の結果が予期した結果と一致しない場合があるため、符号なしの型を使用する前によく考えてください...

53件の元の記事を公開 賞賛された16件 訪問2213件

おすすめ

転載: blog.csdn.net/m0_37757533/article/details/101604678