ライブラリ関数の部分的な実装を思い出してください。以下は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の型です。中点を使用するときは注意してください。符号なしの型を使用すると、操作の結果が予期した結果と一致しない場合があるため、符号なしの型を使用する前によく考えてください...